1. 程式人生 > >機器學習筆記彙總1

機器學習筆記彙總1

1. 機器學習基本型別

  1. 有監督學習:
    根據已知的輸入和輸出,建立聯絡它們的模型,根據該模型對未知輸出的輸入進行判斷。
    1)迴歸:以無限連續域的形式表示輸出
    2)分類:以有限離散域的形式表示輸出

    監督學習又可以劃分為生成模型和判別模型。

    • 生成模型
      由資料學習聯合概率分佈P(X,Y), 然後求出條件概率分佈P(Y|X)作為預測的模型。 典型的有:樸素貝葉斯法隱馬爾科夫模型
    • 判別模型
      由資料直接學習決策函式f(X)或者條件概率分佈P(Y|X)作為預測的模型。典型的有:K近鄰法感知機決策樹邏輯迴歸模型支援向量機提升方法條件隨機場等。
  2. 無監督學習:
    在一組沒有已知輸出(標籤)的輸入中,根據資料的內部特徵和練習,找到某種規則,進行族群的劃分— 聚類

  3. 半監督學習:
    從一個相對有限的已知結構中利用有監督學習的方法,構建基本模型,通過對未知輸入和已知輸入的必讀判斷其輸出,擴充套件原有的已知領域。(知識庫的自我擴充套件)

  • 常見演算法:
    在這裡插入圖片描述

2.資料預處理

特徵處理常用方法:

時間序列的特徵處理常用方法:

  1. 時間特徵連續化:連續的時間差值法,即計算出所有樣本的時間到某一個未來時間之間的數值差距,這樣這個差距是UTC的時間差,從而將時間特徵轉化為連續值
  2. 時間特徵離散化:根據時間所在的年,月,日,星期幾,小時數,將一個時間特徵轉化為若干個離散特徵,這種方法對分析具有明顯時間趨勢的問題比較好用;
  3. 權重法:即根據時間的新舊得到一個權重值。比如對於商品,三個月前購買的設定一個較低的權重,最近三天購買的設定一箇中等的權重,在三個月內但是三天前的設定一個較大的權重等。
  •  l1即L1範數,向量中各元素絕對值之和
     l2即L2範數,向量元素絕對值的平方和再開方 (Euclid範數--歐幾里得範數,常用計算向量長度
     p範數,向量元素絕對值的p次方和的1/p次冪
    

    -2)空間度量
    在平面內,對於點 P (x_1,y_1) 與點 Q (x_2,y_2) 我們所遇到的常見的距離有三種:在這裡插入圖片描述
    曼哈頓距離是歐幾里得空間中兩點之間的線段在座標軸上的投影的距離的和
    (歐幾里得:點距離;曼哈頓:垂直距離或投影距離)

3. 常用的特徵選擇方法

1) 特徵選擇作用

  • 減少特徵數量、降維,使模型泛化能力更強,減少過擬合
  • 增強對特徵和特徵值之間的理解

NOTE:
a) 特徵選擇

降維
相似:效果一致,試圖去減少特徵資料集中特徵的數目
差異:(特徵空間是否改變
- 特徵選擇是從原始特徵資料集中選擇出子集,是一種包含的關係,沒有更改原始的特徵空間
- 降維是通過屬性間的關係,如組合不同的屬性得新的屬性,改變了原來的特徵空間
b)

2)特徵選擇主要方法

- 根據方差移除特徵 Removing features with low variance

假設某特徵(無缺失值或無窮)的特徵值只有0和1,並且在所有輸入樣本中,95%的例項的該特徵取值都是1,反映在統計量上就是方差過小 low variance,也就是樣本在這個特徵上變化很小。

# Remove features with variance lower than 0.2
from sklearn.feature_selection import VarianceThreshold
sel = VarianceThreshold(0.2)
data_VarT = sel.fit_transform(dataset)

NOTE:
1)實際問題中,低方差的資料並不一定代表著其不是有效資料,移除低方差資料帶來的可能並不是模型效能的提升,而是下降。
2)閾值threshold設定的合理性是否能夠得到保證

- 單一變數特徵選擇 Univariate feature selection

單一變數選擇就是通過某種得分來度量相關性,進而選擇特徵,sklearn中有兩個比較常用 :

  • SelectKBest :選擇前k個最好的特徵,也就是得分最高的K個
  • SelectPercentile :選擇前百分之幾的特徵,這個百分比由使用者指定

衡量相關性方法:卡方檢驗F-檢驗以及互資訊
三種衡量方法對於迴歸和分類是不同的:

迴歸:f_regression,   mutual_info_regression 
分類:chi2,   f_classif,   mutual_info_classif

互資訊(mutual_info_regression, mutual_info_classif)可以得到特徵和最後的結果之間的非線性的相關性,而卡方檢驗和F-檢驗應該只能夠判斷線性。
互資訊:度量 X 和 Y 共享的資訊:它度量知道這兩個變數其中一個,對另一個不確定度減少的程度

卡方檢驗:用方差來衡量某個觀測頻率和理論頻率之間差異性的方法

python程式碼():SelectPercentile(method, params).fit_transform(x,y)

sklearn.feature_selection import f_regression
from sklearn.feature_selection import  SelectPercentile
# x.shape: (1456, 388) 
# y.shape: (1456, 1)
datanew = SelectPercentile(f_regression, 30).fit_transform(x,y)
datanew.shape
Out[71]: (1456, 117)		# features reduce from 388 to 117 with 30% percentage

- 遞迴特徵消除 RFE

給定一個具有coef_或者feature_importance_屬性的模型,利用base model訓練這些相關性特徵,刪除得分最差的特徵,重複訓練直到滿足預設的特徵個數。

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
#遞迴特徵消除法,返回特徵選擇後的資料
#引數estimator為基模型
#引數n_features_to_select為選擇的特徵個數
RFE(estimator=LogisticRegression(), n_features_to_select=5).fit_transform(x, y)

- SelectFromModel

類似RFE,引數為base model和threshold.

  • base model: The estimator must have either a feature_importances_ or coef_ attribute after fitting
  • threshold:the threshold value to use for feature selection. – importance score [0,1]
from sklearn.feature_selection import SelectFromModel

# Set a minimum threshold of 0.3
sfm= SelectFromModel(Lasso(), threshold=0.3)
sfm.fit(X, y)
n_features = sfm.transform(X).shape[1]

- 線性模型和正則化

正則化模型:

  • 線性迴歸 + L1正則項: Lasso(alpha)
  • 線性迴歸 + L2正則項: Ridge(alpha, solver)
  • 線性迴歸 + 正則項([L1,L2]):ElasticNet(alpha, l1_ratio)

實際使用中,如果特徵是高維稀疏的,則使用L1正則;如果特徵是低維稠密的,則使用L2正則。
L2不能控制feature的“個數”,但是能防止模型overfit到某個feature上;相反L1是控制feature“個數”的,並且鼓勵模型在少量幾個feature上有較大的權重。

L1正則化:

L1正則化將係數w的l1範數作為懲罰項加到損失函式上,由於正則項非零,這就迫使那些弱的特徵所對應的係數變成0。因此L1正則化往往會使學到的模型很稀疏(係數w經常為0),這個特性使得L1正則化成為一種很好的特徵選擇方法。

L1正則化像非正則化線性模型一樣也是不穩定的,如果特徵集合中具有相關聯的特徵,當資料發生細微變化時也有可能導致很大的模型差異。

L2正則化:

L2正則化將係數向量的L2範數新增到了損失函式中。由於L2懲罰項中係數是二次方的,這使得L2和L1有著諸多差異,最明顯的一點就是,L2正則化會讓係數的取值變得平均

對於關聯特徵,這意味著他們能夠獲得更相近的對應係數。還是以Y=X1+X2為例,假設X1和X2具有很強的關聯,如果用L1正則化,不論學到的模型是Y=X1+X2還是Y=2X1,懲罰都是一樣的,都是2 alpha。
但是對於L2來說,第一個模型的懲罰項是2 alpha,但第二個模型的是4*alpha。可以看出,係數之和為常數時,各系數相等時懲罰是最小的,所以才有了L2會讓各個係數趨於相同的特點

L2正則化對於特徵選擇來說一種穩定的模型L1正則化係數會因為細微的資料變化而波動。所以L2正則化和L1正則化提供的價值是不同的,L2正則化對於特徵理解來說更加有用:表示能力強的特徵對應的係數是非零。

from sklearn.linear_model import Lasso
lasso = Lasso(alpha=0.03)
lasso.fit(X, Y)
coefs = lasso.coef_     #  特徵係數
-決策樹模型的特徵選擇(xgboost,gboost,randomforest,cart…)

1)結合業務優先選擇有限的主要特徵,劃分子表,降低決策樹的高度。
缺點:特徵數量多的時候,決策樹可能層級過高
2)決策樹學習應用資訊增益準則(資訊增益或資訊增益比)選擇特徵。
決策樹根據夏農定理計算根據每一個特徵劃分子表前後的資訊熵差,選擇熵減少量最大的特徵,優先參與子表劃分

  1. 資訊增益g(D,A):得知特徵A的資訊而使得對資料集D的分類的不確定性減少的程度(即熵減程度 = 經驗熵H(D) - 經驗條件熵H(D|A)).
    g(D,A) = H(D) - H(D|A).

資訊增益準則的特徵選擇方法
對訓練資料集(或子集)D,計算其每個特徵的資訊增益,選擇資訊增益最大的特徵

缺陷:

  1. 存在偏向於選擇取值較多的特徵的問題;
  2. 對於關聯特徵,先被選中的特徵重要度很高,其他的關聯特徵重要度往往較低,在理解特徵時會造成誤解。
  • 資訊增益比:特徵A對訓練資料集D的資訊增益比g(D,A;R)定義為其資訊增益g(D,A)與訓練資料集D關於特徵A的值的熵H(D;A)之比。
    g(D,A;R) = g(D,A) / H(D;A).

對於基於模型的特徵選擇來說,關聯特徵的打分基本都會存在不穩定的現象。

4. 演算法

- 聚類

1、K-均值演算法

  • 概述:
    K-means演算法是很典型的基於距離(歐幾里得距離)的聚類演算法,採用距離作為相似性的評價指標