《Python數據科學手冊》第五章機器學習的筆記

《Python數據科學手冊》第五章機器學習的筆記

0. 寫在前面

參考書git

《Python數據科學手冊》第五章「機器學習」github

工具算法

Jupyter Lab網絡

做用app

給書中沒有的知識點作補充。dom

1. 斷定係數

  1. 定義

斷定係數(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}}$

  1. 總結

R$^2$ = 1:表示模型與數據徹底吻合。

R$^2$ = 0:表示模型不比簡單取均值好。

R$^2$ < 0:表示模型性能不好。

  1. 係數標準

斷定係數只是說明列入模型的全部解釋變量對因變量的聯合的影響程度,不說明模型中單個解釋變量的影響程度。
斷定係數達到多少爲宜?沒有一個統一的明確界限值;若建模的目的是預測因變量值,通常需考慮有較高的斷定係數。若建模的目的是結構分析,就不能只追求高的斷定係數,而是要獲得整體迴歸係數的可信任的估計量。斷定係數高並不必定說明每一個迴歸係數均可信任。

2. 樸素貝葉斯

  1. 貝葉斯定理

咱們在生活中常常遇到這種狀況:咱們能夠很容易直接得出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)$

參考:機器學習之貝葉斯(貝葉斯定理、貝葉斯網絡、樸素貝葉斯)

樸素貝葉斯分類是一種十分簡單的分類算法,叫它樸素貝葉斯分類是由於這種方法的思想真的很樸素。

樸素貝葉斯的思想基礎是這樣的:對於給出的待分類項,求解在此項出現的條件下各個類別出現的機率,哪一個最大,就認爲此待分類項屬於哪一個類別。通俗來講,就比如這麼個道理,你在街上看到一個黑人,我問你你猜這哥們哪裏來的,你十有八九猜非洲。爲何呢?由於黑人中非洲人的比率最高,固然人家也多是美洲人或亞洲人,但在沒有其它可用信息下,咱們會選擇條件機率最大的類別,這就是樸素貝葉斯的思想基礎。

  1. 樸素貝葉斯的應用場景

因爲樸素貝葉斯分類器對數據有嚴格的假設,所以它的訓練效果一般比複雜模型的差。其優勢主要體如今如下四個方面。

  • 訓練和預測的速度很是快
  • 直接使用機率預測
  • 一般很容易理解
  • 可調參數(若是有的話)很是少。

樸素貝葉斯分類器很是適合用於如下應用場景:

  • 假設分佈函數與數據匹配(實際中不多見)。
  • 各類類型的區分度很高,模型複雜度不重要。
  • 很是高維度的數據,模型複雜度不重要。

3. 自舉重採樣方法

模式識別中每一個方法的實現都是基於一個特定的數據樣本集的,可是這個樣本集只是全部可能的樣本中的一次隨機抽樣,畢竟在咱們的生活實際中存在着萬物衆生,多到咱們數也數不清,甚至計算機都沒法統計的清,而咱們蒐集到的充其量只是其中很小很小的一部分,這也是爲何機器學習中缺乏的只是數據,只要有足夠多的學習數據,就必定能取得驚人的結果,所以模式識別和機器學習中的不少方法的實現結果都無疑會受到這種隨機性的影響,咱們訓練獲得的分類器也所以具備偶然性,尤爲是樣本不足夠多時更爲明顯。

對於決策樹而言,其樹的生長是採用的貪心算法,只考慮當前局部的最優,所以其受這種隨機性影響會更加嚴重,這也是爲何有的決策樹泛化能力那麼差的緣由。

針對這種隨機性的影響,最先在統計學中有人提出了一種叫作」自舉(Bootstrap)「的策略,基本思想是對現有樣本進行重複採樣而產生多個樣本子集,經過這種屢次重複採樣來模擬數據的隨機性,而後在最後的輸出結果中加進去這種隨機性的影響。隨後有人把這種自舉的思想運用到了模式識別中,衍生出了一系列的解決方法,像隨機森林、Bagging、Adaboost等。

4. 白化

白化的目的是去除輸入數據的冗餘信息。假設訓練數據是圖像,因爲圖像中相鄰像素之間具備很強的相關性,因此用於訓練時輸入是冗餘的;白化的目的就是下降輸入的冗餘性。

輸入數據集X,通過白化處理後,新的數據X'知足兩個性質:

(1)特徵之間相關性較低;
(2)全部特徵具備相同的方差。

其實咱們以前學的PCA算法中,可能PCA給咱們的印象是通常用於降維操做。然而其實PCA若是不降維,而是僅僅使用PCA求出特徵向量,而後把數據X映射到新的特徵空間,這樣的一個映射過程,其實就是知足了咱們白化的第一個性質:除去特徵之間的相關性。所以白化算法的實現過程,第一步操做就是PCA,求出新特徵空間中X的新座標,而後再對新的座標進行方差歸一化操做。

參考連接:機器學習(七)白化whiteningPCA 和 白化區別

5. 機器學習章節總結

  1. 有監督學習
    • 高斯樸素貝葉斯(Gaussian naive Bayes):速度快,不須要選擇超參數,因此一般很適合做爲初步分類手段,在藉助更復雜的模型進行優化以前使用。這個方法假設每一個特徵中屬於一類的觀測值都符合高斯分佈,且變量無協方差(即線性無關)。橢圓曲線表示每一個標籤的高斯生成模型,越靠近橢圓中心的可能性越大。經過這種相似的生成模型,能夠計算出任意數據點的似然估計(likelihood)P(特徵|$L_1$),而後根據貝葉斯定理計算出後驗機率比值,從而肯定每一個數據點可能性最大的標籤。貝葉斯主義(Bayesian formalism)的一個優質特性是它天生支持機率分類,咱們能夠用predict_proba方法計算樣本屬於某個標籤的機率。缺點:因爲分類結果只能依賴於一開始的模型假設,所以高斯樸素貝葉斯常常得不到很是好的結果。
    • 多項式樸素貝葉斯(multinomial naive Bayes)它假設特徵是由一個簡單多項式分佈生成的。優勢:多項分佈能夠描述各類類型樣本出現次數的機率,所以多項式樸素貝葉斯很是適用於描述出現次數或者出現次數比例的特徵。
    • 簡單線性迴歸(Linear Regression):將數據擬合成一條直線。除了簡單的線性擬合,它還能夠處理多維度的線性迴歸模型。
    • 基函數迴歸(basis function regression):經過基函數對原始數據進行變換,從而將變量間的線性迴歸模型轉換爲非線性迴歸模型。有多項式基函數高斯基函數等。
    • 正則化(regularization):雖然在線性迴歸模型中引入基函數會讓模型變得更加靈活,可是也很容易形成過擬合。當基函數重疊的時候,一般就代表出現了過擬合:相鄰基函數的係數想相互抵消。對較大的模型參數進行懲罰(penalize),從而抑制模型的劇烈波動,這個懲罰機制被稱爲正則化。有嶺迴歸(ridge regression,$L_2$範數正則化):$P = \alpha \sum_{n=1}^N \theta_n^2$、Lasso正則化($L_1$範數):$P = \alpha \sum_{n=1}^N |\theta|$。Lasso正則化傾向於構建稀疏矩陣,即它更喜歡將模型係數設置爲0。
    • 支持向量機(support vector machine, SVM):不一樣於貝葉斯分類器,首先對每一個類進行了隨機分佈的假設,而後用生成的模型估計新數據點的標籤。——生成分類方法;支持向量機是判別分類方法:再也不爲每類數據建模、而是用一條分割線(二維空間中的直線或曲線)或者流體形(多維空間中的曲線、曲面等概念的推廣)將各類類型分割開。邊界最大化評估器。核變換核函數技巧處理非線性問題。SVM實現了一些修正因子來軟化邊界
    • 決策樹:採用很是直觀的方式對事物進行分類或打標籤,二叉樹分支方法缺點:決策樹很是容易陷得很深(過擬合)。
    • 隨機森林:經過組合多個過擬合評估器來下降過擬合程度的想法,實際上是一種集成學習方法,稱爲裝袋算法優勢:無參數的隨機森林模型很是適合處理多週期數據,不須要咱們配置多週期模型!訓練和預測速度都很是快。多任務能夠直接並行計算。多棵樹能夠進行機率分類。無參數模型很靈活,在其餘評估器都欠擬合的任務中表現突出。缺點:結果不太容易解釋。
  2. 無監督學習
    • 主成分分析技術(principal component analysis, PCA):這是一種快速線性降維技術。沿着最不重要的主軸的信息都被去除了,僅留下含有最高方差值的數據成分。降維原理:發現一組比原始的像素基向量更能有效表示輸入數據的基函數。用PCA做噪音過濾:建模->逆變換重構。缺點:常常受數據集的異常點影響。RandomizedPCA:使用了一個非肯定算法,快速地近似計算出一個維度很是高的數據的前幾個主成分。SparsePCA:引入了一個正則項來保證成分的稀疏性。
    • 流形學習它試圖將一個低維度流形嵌入到一個高維度空間來描述數據集。多維度標度法(multidimensional scaling,MDS):它能夠將一個數據集的距離矩陣還原成一個D維座標來表示數據集。缺點:沒法展現數據非線性嵌入的特徵。當MDS失敗時,局部線性嵌入法(locally linear embedding,LLE):該方法不保留全部的距離,而是隻保留鄰節點間的距離。一般狀況下,modified LLE的效果比用其餘算法還原實現定義好的流形數據的效果好。保距映射法(isometric mapping,Isomap):雖然LLE一般對現實世界的高維數據源的學習效果比較差,可是Isomap算法每每會得到比較好的嵌入效果。t-分佈鄰域嵌入算法(t-distributed stochastic neighbor embedding, t-SNE):將它用於高度聚類的數據效果比較好,可是該方法比其餘方法學習速度慢。
    • k-means聚類:在不帶標籤的多維數據集中尋找肯定數量的簇,最優的聚類結果須要符合如下兩個假設:a. 「簇中心點」是屬於該簇的全部數據點座標的算術平均值。b. 一個簇的每一個點到該簇中心點的距離比其餘簇中心點的距離短。k-means方法使用了一種容易理解、便於重複的指望最大化算法(E-M算法)取代了窮舉搜索。使用E-M算法時的注意事項:a. 可能不會達到全局最優結果;b. 簇數量必須事先定好;c. k-means算法只能肯定線性聚類邊界。可是咱們能夠經過一個核變換將數據投影到更高維的空間,投影后的數據使線性分離稱爲可能。(這種核k-means算法能夠在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的這兩個缺點——類的形狀缺乏靈活性缺乏簇分配的機率——使得它對許多數據集(特別是低維數據集)的擬合效果不盡人意。
    • 高斯混合模型(Gaussian mixture model, GMM):該模型能夠被看做是k-means思想的一個擴展,一個聚類和密度評估器的混合體。GMM模型試圖將數據構形成若干服從高斯分佈的機率密度函數簇,即用不一樣高斯分佈的加權彙總來表示機率分佈估計。高斯混合模型本質上與k-means模型很是相似,它們都是用了指望最大化(E-M)方法。但高斯混合模型的每一個簇的結果並不與硬邊緣的空間有關,而是經過高斯平滑模型實現。GMM算法的本質是一個密度估計算法,即GMM擬合的結果並非一個聚類模型,而是描述數據分佈的生成機率模型。GMM能夠利用改模型來評估數據的似然估計,並利用交叉驗證來防止過擬合,還有一些糾正過擬合的標準分析方法,例如赤池信息準則(Akaike information criterion,AIC)貝葉斯信息準則(Bayesian information criterion,BIC)調整模型的似然估計。類的最優數量出如今AIC或BIC曲線最小值的位置。生成模型是貝葉斯生成分類器的一個很是有用的成分。
    • 核密度估計(kernel density estimation,KDE):該算法將高斯混合理念擴展到了邏輯極限(logical extreme)。它經過對每一個點生成高斯分佈的混合成分,得到本質上是無參數的密度估計器。核密度估計的自有參數是:a. 核類型(kernel),它能夠指定每一個點核密度分佈的形狀;b. 核帶寬(kernel bandwidth),它控制每一個點的核的大小。
  3. 驗證模型(根據書上的例子,分爲分類和迴歸,固然部分函數是能夠混用的)
    1. 留出集和特徵工程
      • 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.TfidVectorizerTF-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.hogHOG特徵(方向梯度直方圖,Histogram of Oriented Gradients)。它能夠將圖像像素轉換爲向量形式,與圖像具體內容有關,與圖像合成因素無關。它是一個簡單的特徵提取程序,專門用來識別行人(pedestrians)的圖像內容。
    2. 分類(Classification)
      • 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())
    3. 迴歸(Regression)
      • 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 李英俊小朋友

相關文章
相關標籤/搜索