參考書git
《Python數據科學手冊》第五章「機器學習」github
工具算法
Jupyter Lab網絡
做用app
給書中沒有的知識點作補充。dom
斷定係數(coefficient of determination),也叫可決係數或決定係數,是指在線性迴歸中,迴歸平方和與總離差平方和之比值,其數值等於相關係數的平方。它是對估計的迴歸方程擬合優度的度量。(參考:百度百科)機器學習
斷定係數(記爲R$^2$)在統計學中用於度量因變量的變異中可由自變量解釋部分所佔的比例,以此來判斷統計模型的解釋力。對於簡單線性迴歸而言,斷定係數爲樣本相關係數的平方。ide
假設一數據集包括$y_1, y_2, ..., y_n$共n個觀察值,相對應的模型預測值分別爲$f_1, f_2, ..., f_n$。定義殘差$e_i = y_i - f_i$,函數
平均觀察值爲:$\bar{y} = \cfrac{1}{n} \sum\limits_{i=1}^n y_i$
因而能夠獲得總平方和:$SS_{tot} = \sum\limits_{i=1} (y_i - \bar{y})^2$
迴歸平方和:$SS_{reg} = \sum\limits_{i=1} (f_i - \bar{y})^2$
殘差平方和:$SS_{res} = \sum\limits_{i=1} (y_i - f_i)^2 = \sum\limits_{i=1} e_i^2$
由此,斷定係數可定義爲:$R^2 = 1 - \cfrac{SS_{res}}{SS_{tot}}$
R$^2$ = 1:表示模型與數據徹底吻合。
R$^2$ = 0:表示模型不比簡單取均值好。
R$^2$ < 0:表示模型性能不好。
斷定係數只是說明列入模型的全部解釋變量對因變量的聯合的影響程度,不說明模型中單個解釋變量的影響程度。
斷定係數達到多少爲宜?沒有一個統一的明確界限值;若建模的目的是預測因變量值,通常需考慮有較高的斷定係數。若建模的目的是結構分析,就不能只追求高的斷定係數,而是要獲得整體迴歸係數的可信任的估計量。斷定係數高並不必定說明每一個迴歸係數均可信任。
咱們在生活中常常遇到這種狀況:咱們能夠很容易直接得出P(A|B),P(B|A)則很難直接得出,但咱們更關心P(B|A),貝葉斯定理就爲咱們打通從P(A|B)求得P(B|A)的道路。
$P(B|A) = \cfrac{P(A|B)P(B)}{P(A)}$
推導:$P(A, B) = P(B|A) * P(A) = P(A|B) * P(B)$
參考:機器學習之貝葉斯(貝葉斯定理、貝葉斯網絡、樸素貝葉斯)
樸素貝葉斯分類是一種十分簡單的分類算法,叫它樸素貝葉斯分類是由於這種方法的思想真的很樸素。
樸素貝葉斯的思想基礎是這樣的:對於給出的待分類項,求解在此項出現的條件下各個類別出現的機率,哪一個最大,就認爲此待分類項屬於哪一個類別。通俗來講,就比如這麼個道理,你在街上看到一個黑人,我問你你猜這哥們哪裏來的,你十有八九猜非洲。爲何呢?由於黑人中非洲人的比率最高,固然人家也多是美洲人或亞洲人,但在沒有其它可用信息下,咱們會選擇條件機率最大的類別,這就是樸素貝葉斯的思想基礎。
因爲樸素貝葉斯分類器對數據有嚴格的假設,所以它的訓練效果一般比複雜模型的差。其優勢主要體如今如下四個方面。
樸素貝葉斯分類器很是適合用於如下應用場景:
模式識別中每一個方法的實現都是基於一個特定的數據樣本集的,可是這個樣本集只是全部可能的樣本中的一次隨機抽樣,畢竟在咱們的生活實際中存在着萬物衆生,多到咱們數也數不清,甚至計算機都沒法統計的清,而咱們蒐集到的充其量只是其中很小很小的一部分,這也是爲何機器學習中缺乏的只是數據,只要有足夠多的學習數據,就必定能取得驚人的結果,所以模式識別和機器學習中的不少方法的實現結果都無疑會受到這種隨機性的影響,咱們訓練獲得的分類器也所以具備偶然性,尤爲是樣本不足夠多時更爲明顯。
對於決策樹而言,其樹的生長是採用的貪心算法,只考慮當前局部的最優,所以其受這種隨機性影響會更加嚴重,這也是爲何有的決策樹泛化能力那麼差的緣由。
針對這種隨機性的影響,最先在統計學中有人提出了一種叫作」自舉(Bootstrap)「的策略,基本思想是對現有樣本進行重複採樣而產生多個樣本子集,經過這種屢次重複採樣來模擬數據的隨機性,而後在最後的輸出結果中加進去這種隨機性的影響。隨後有人把這種自舉的思想運用到了模式識別中,衍生出了一系列的解決方法,像隨機森林、Bagging、Adaboost等。
白化的目的是去除輸入數據的冗餘信息。假設訓練數據是圖像,因爲圖像中相鄰像素之間具備很強的相關性,因此用於訓練時輸入是冗餘的;白化的目的就是下降輸入的冗餘性。
輸入數據集X,通過白化處理後,新的數據X'知足兩個性質:
(1)特徵之間相關性較低;
(2)全部特徵具備相同的方差。
其實咱們以前學的PCA算法中,可能PCA給咱們的印象是通常用於降維操做。然而其實PCA若是不降維,而是僅僅使用PCA求出特徵向量,而後把數據X映射到新的特徵空間,這樣的一個映射過程,其實就是知足了咱們白化的第一個性質:除去特徵之間的相關性。所以白化算法的實現過程,第一步操做就是PCA,求出新特徵空間中X的新座標,而後再對新的座標進行方差歸一化操做。
參考連接:機器學習(七)白化whitening,PCA 和 白化區別
predict_proba
方法計算樣本屬於某個標籤的機率。缺點:因爲分類結果只能依賴於一開始的模型假設,所以高斯樸素貝葉斯常常得不到很是好的結果。RandomizedPCA
:使用了一個非肯定算法,快速地近似計算出一個維度很是高的數據的前幾個主成分。SparsePCA
:引入了一個正則項來保證成分的稀疏性。sklearn.cluster.SpectralClustering
評估器中實現,它使用最鄰近來計算數據的高維表示,而後用k-means算法分配標籤); d. 當數據量較大時,k-means會很慢。這時就須要將「每次迭代都必須使用全部數據點」這個條件放寬,例如每一步僅使用數據集的一個子集來更新簇中心點。這偏偏就是批處理(batch-based)k-means算法的核心思想,該算法在sklearn.clust er.MiniBatchKMeans
中實現。還可使用k-means用於色彩壓縮。缺點:在實際應用中,k-means的非機率性和它僅根據到簇中心點的距離來指派簇的特色將致使性能低下。因爲k-means自己沒有度量簇的分配機率或不肯定性的方法,k-means能夠理解爲在每一個簇的中心放置了一個圓,在這個圓圈以外的任何點都不是該簇的成員。全部k-means的這兩個缺點——類的形狀缺乏靈活性、缺乏簇分配的機率——使得它對許多數據集(特別是低維數據集)的擬合效果不盡人意。sklearn.model_selection.train_test_split
:留出集。X1, X2, y1, y2 = train_test_split(X, y, random_state, train_size)
sklearn.feature_extraction.DictVectorizer
:獨熱編碼。解決常見的非數值類型的分類特徵。vec = DictVectorizer(sparse, dtype)
sklearn.feature_extraction.text.CountVectorizer
:單詞統計。將文字編碼成數字的技術手段。vec = CountVectorizer()
sklearn.feature_extraction.text.TfidVectorizer
:TF-IDF(term frequency-inverse document frequency,詞頻逆文檔頻率)。經過單詞在文檔中出現的頻率來衡量其權重,IDF的大小與一個詞的常見程度成反比。vec = TfidVectorizer()
sklearn.preprocessing.PolynomialFeatures
:多項式特徵,輸入特徵通過數學變換衍生出來的新特徵,這種特徵叫作衍生特徵,這種處理方式被稱爲基函數迴歸(basis function regression)。poly = PolynomialFeatures(degree, include_bias)
sklearn.preprocessing.Imputer
:缺失值補充。用均值、中位數、衆數等填充方法補充缺失值。imp = Imputer(strategy)
sklearn.pipeline.make_pipeline
:特徵管道。將多個步驟串起來。model = make_pipeline(*steps)
skimage.feature.hog
:HOG特徵(方向梯度直方圖,Histogram of Oriented Gradients)。它能夠將圖像像素轉換爲向量形式,與圖像具體內容有關,與圖像合成因素無關。它是一個簡單的特徵提取程序,專門用來識別行人(pedestrians)的圖像內容。sklearn.metrics.accuracy_score
:驗證模型越策結果的準確率(預測的全部結果中,正確結果佔總預測樣本數的比例)。accuracy_score(y_true, y_pred)
sklearn.metrics.confusion_matrix
:混淆矩陣,分類結果和原始標籤的一個表。confusion_matrix(y_true, y_pred)
sklearn.model_selection.cross_val_score
:交叉驗證。cross_val_score(model, X, y, cv)
sklearn.model_selection.LeaveOneOut
:留一(LOO)交叉驗證。cross_val_score(model, X, y, cv=LeaveOneOut())
sklearn.model_selection.validation_curve
:驗證曲線。計算驗證範圍內的訓練得分和驗證得分。train_score, val_score = validation_curve(model, X, y, param_name, param_range, cv)
sklearn.model_selection.learning_curve
:學習曲線。反映訓練集規模的訓練得分 / 驗證得分曲線。learning_curve(model, X, y, cv, training_sizes)
sklearn.model_selection.GridSearchCV
:網格搜索。尋找模型的最優參數。GridSearchCV(model, param_grid, cv)
個人CSDN:https://blog.csdn.net/qq_21579045
個人博客園:https://www.cnblogs.com/lyjun/
個人Github:https://github.com/TinyHandsome
紙上得來終覺淺,絕知此事要躬行~
歡迎你們過來OB~
by 李英俊小朋友