常用機器學(xué)習(xí)算法入門(小白適用)

目錄
1. 監(jiān)督學(xué)習(xí)

  • 貝葉斯與樸素貝葉斯
  • SVM
  • 決策樹
  • 回歸
    2. 非監(jiān)督學(xué)習(xí)
  • KMeans聚類
  • 主成分分析PCA

1. 監(jiān)督學(xué)習(xí)

1.1 貝葉斯與樸素貝葉斯
1.11 貝葉斯

貝葉斯是基于對觀測值概率分布的主觀判斷(先驗概率)進行修正的定理。
先驗概率是基于主觀判斷而非樣本分布的概率分布;后驗概率是根據(jù)樣本分布和未知參數(shù)的先驗概率分布求得的條件概率分布。

  • 簡單描述:在用概率對某個事件進行推斷之前,已知該事件的概率,稱為‘先驗概率’,在后續(xù)研究中通過抽樣等消息又得到有關(guān)該事件的其他信息,這些信息對先驗概率進行修正,被稱為后驗概率。
    兩個事件A和B,A事件發(fā)生條件下B發(fā)生的概率P(B|A),和B事件發(fā)生條件下A發(fā)生的概率P(A|B)是不同的,貝葉斯法則就是對這種關(guān)系的陳述。

  • 公式
    P(A且B)=P(A)P(B|A)=P(B)P(A|B),所以P(B|A)=P(B)P(A|B)/P(A)*,舉例說明

  • 舉例說明《吸毒者檢測》
    假設(shè)一個對吸毒者的常規(guī)檢測結(jié)果的敏感度與可靠度均為99%,也就是說,當被檢者吸毒時,每次檢測呈陽性(+)的概率為99%。而被檢者不吸毒時,每次檢測呈陰性(-)的概率為99%。從檢測結(jié)果的概率來看,檢測結(jié)果是比較準確的,但是貝葉斯定理卻可以揭示一個潛在的問題。假設(shè)某公司將對其全體雇員進行一次鴉片吸食情況的檢測,已知0.5%的雇員吸毒。我們想知道,每位檢測呈陽性的雇員,他吸毒的概率有多高?

令"A"為雇員吸毒事件,"C"為雇員不吸毒事件,"B"為檢測呈陽性事件。則:
已知P(A)=0.5%
已知P(B|A)=99%
已知P(非B|C)=99%
求P(A|B)?
步驟一:
已知P(A)=0.5%,則P(C)=99.5%
已知P(B|A)=99%,則P(非B|A)=1%,
已知P(非B|C)=99%,則P(B|C)=1%
步驟二:
求P(A|B)即B發(fā)生下A的概率,先求P(B)發(fā)生的概率,P(B)=不管是否吸毒檢查結(jié)果為陽性的概率,所以
P(B) = 陽性吸毒+陽性不吸毒=P(B|A)P(A)+P(B|C)P(C)=99%0.5%+1%99.5%=1.49%
步驟三:
因此P(A|B)=P(B|A)*P(A)/P(B)=33.22%——貝葉斯公式
結(jié)論:如果某人檢測呈陽性,那么此人是吸毒的概率只有大約33%,也就是說此人不吸毒的可能性比較大。我們測試的條件(本例中指A,即雇員吸毒)越難發(fā)生,發(fā)生誤判的可能性越大。

這里的P(A)=0.5%為先驗概率,P(B|A)=99%和P(非B|C)=99%為條件概率;P(A|B)=1.49%為后驗概率

1.12樸素貝葉斯

貝葉斯是A發(fā)生條件下B發(fā)生的概率,那么樸素貝葉斯就是AB兩個事件獨立,發(fā)生概率直接P(A)P(B)即可,即不考慮出現(xiàn)的順序。
舉例說明:
比如sara發(fā)郵件文本包括愛0.4、生活0.5、工作0.1,chirs文本包括愛0.1、生活0.3、工作0.6,先驗概率sara和chirs發(fā)郵件概率均為0.5。那么:
P(sara|工作、生活)=0.5
0.10.5
P(chirs|工作、生活)=0.5
0.3*0.6

from sklearn import GaussianNB
clf = GaussianNB()
clf.fit(xtrain,ytrian)
pre = clf.predict(xtest)
計算分類器的準確率:
clf.score()

*補充說明樸素貝葉斯算法原理:


image.png

問:身高“高”、體重“中”,鞋碼“中”,請問這個人是男還是女?
答:這里有三個屬性A1=身高“高”,A2=體重“中”,A3=鞋碼“中”,男女分為兩種類別C1男,C2女。其實就是看在A1A2A3條件下是C1的概率大還是C2的概率大。也就是 P(C1|A1A2A3) 和 P(C2|A1A2A3) 哪個概率大?


image.png
  • 在這個公式里,因為 P(A1A2A3) 都是固定的,我們想要尋找使得 P(Cj|A1A2A3) 的最大值,就等價于求 P(A1A2A3|Cj)P(Cj) 最大值。
  • 我們假定 Ai 之間是相互獨立的,那么: P(A1A2A3|Cj)=P(A1|Cj)P(A2|Cj)P(A3|Cj)
    然后我們需要從 Ai 和 Cj 中計算出 P(Ai|Cj) 的概率,帶入到上面的公式得出 P(A1A2A3|Cj),最后找到使得 P(A1A2A3|Cj) 最大的類別 Cj。
  • 分別求下這些條件下的概率:
    P(A1|C1)=1/2, P(A2|C1)=1/2, P(A3|C1)=1/4,P(A1|C2)=0, P(A2|C2)=1/2, P(A3|C2)=1/2,所以 P(A1A2A3|C1)=1/16, P(A1A2A3|C2)=0。
    因為 P(A1A2A3|C1)P(C1)>P(A1A2A3|C2)P(C2),所以應(yīng)該是 C1 類別,即男性
1.2 SVM
  • 尋找兩類數(shù)據(jù)之間的分割線(也就是超平面),這條線對兩個分類均最大化到最近點的距離,這個距離叫做“間隔”。
  • 間隔是兩個分類中最近點的距離最大化,也叫做“最大間隔超平面”。穩(wěn)定不會出現(xiàn)分類誤差。
  • SVM核心就是最大程度提升結(jié)果的穩(wěn)定性,首先考慮分類準確性再考慮間隔最大化,可以容忍個別異常值。因此SVM對有異常值的情況反映較為穩(wěn)定,它能找到最大間隔和忽略異常值。
from sklearn import svm
clf = svm.SVC(kernel='linear線性函數(shù)''rbf徑向基函數(shù)-不規(guī)則曲線',c,gamma)
#kernel核函數(shù),c對誤差的容忍度,gamma映射到新空間的分布。這三個參數(shù)能過避免過擬合
clf.fit(x_train,y_train)
pre=clf.predict(x_test)

c是懲罰系數(shù),c越大對訓(xùn)練數(shù)據(jù)正確分類要求越高,會得到復(fù)雜的決策邊界,同時容易造成過擬合。平衡光滑的決策邊界和訓(xùn)練點分類正確。

image.png

雖然svm是基于線性分割的分類器,但是它能實現(xiàn)非線性問題,只需要將特征進行轉(zhuǎn)換,因此需要用到核函數(shù)去轉(zhuǎn)換。

  • 核函數(shù)接受低維度(非線性)輸入變量映射到高維度(線性)空間上,然后支持SVM的分類得到解后返回原始空間,得到非線性分割。
  • SVM適用:一般來說圖像分類適用于核函數(shù)=rbf,文本不適用rbf
1.3 決策樹

首先決策樹既適用于回歸也適用于分類
可以用決策樹處理多元線性回歸問題,個人理解是將每個子節(jié)點看成一個線性問題,決策樹有多個子節(jié)點。

決策樹構(gòu)造:

決策樹由根節(jié)點、子節(jié)點、葉節(jié)點構(gòu)成。
根節(jié)點:最頂端根部,一般是判別結(jié)果,如:是否減速
子節(jié)點:中間節(jié)點,熵會影響決策樹邊界,選擇哪個特征會最大化信息增益
葉節(jié)點:決策的結(jié)果,適當停止分類,如果屬性過多容易過擬合,過少容易欠擬合。


image.png
過擬合和欠擬合

過擬合:模型被訓(xùn)練的太精細化造成分支過多,把訓(xùn)練集中一些數(shù)據(jù)的特征看成所有特征,導(dǎo)致泛化能力便變差,在測試集中太過于死板,不能準確分類;還有就是因為訓(xùn)練集數(shù)據(jù)量較小。
泛化能力:就是分類器舉一反三的能力
欠擬合:模型訓(xùn)練結(jié)果不理想

熵和純度:

純度就是目標變量的分歧最小,比如樣本只有一個分類結(jié)果純度最高,樣本平均分布純度最低。
熵就是不純度的測量值,與純度成負相關(guān)關(guān)系,極端情況下熵=0說明樣本只有一個類別,熵=1說明樣本均勻分布。熵越小數(shù)據(jù)單一性越高。
熵的公式:Entropy = ?∑i?(pi?)log2?(pi?),其中pi代表類別的占比。

信息增益ID3:

信息增益=父熵-加權(quán)子熵,決策樹會最大化信息增益,該方法選擇哪個特征作為子節(jié)點。
舉例說明:


image.png

選擇溫度、濕度、刮風(fēng)三個特征作為子節(jié)點(python實現(xiàn))
步驟一:
首先計算父熵:
已知根節(jié)點7個值3個是4個否

import math
re1 = -4/7*(math.log(4/7,2))
re2 = -3/7*(math.log(3/7,2))
re1+re2=0.985
image.png

步驟二:
分別計算三個特征的熵,溫度舉例,已知溫度高(2是2否)、溫度中(1是1否)、溫度低(1否)

import math
re1 = -1/2*(math.log(1/2,2))
re2 = -1/2*(math.log(1/2,2))
re1+re2=1-溫度高

import math
re1 = -1/2*(math.log(1/2,2))
re2 = -1/2*(math.log(1/2,2))
re1+re2=1-溫度中

因此溫度高熵=1,溫度中熵=1,溫度低熵=0(根據(jù)熵與純度關(guān)系也可知)


image.png

步驟三:計算信息增益
信息增益=父熵-加權(quán)子熵
即:溫度信息增益0.985-(4/71+2/71+1/7*0)=0.128,
同理:
濕度信息增益=0.02
刮風(fēng)信息增益=0.02
天氣信息增益=0.02
因此溫度作為屬性的信息增益最大。

image.png

步驟四:
繼續(xù)根據(jù)溫度判斷其他特征的信息增益取最大值。

結(jié)論:因為ID3 就是要將信息增益最大的節(jié)點作為父節(jié)點 這樣可以得到純度高的決策樹,所以我們將溫度作為根節(jié)點。
ID3的缺點是:
(1)如果子節(jié)點A中有最大屬性量,每個屬性熵=0,那么它的信息增益最大
(2)不能處理連續(xù)變量

如何解決過擬合問題?

答案是:剪枝,通過主動去掉分支降低過擬合的風(fēng)險

  • 預(yù)剪枝:對每個節(jié)點劃分前估計,若這個節(jié)點劃分不能帶來決策樹的泛化性能提升,那么停止劃分,標記為子節(jié)點。
  • 后剪枝:先訓(xùn)練成完整的決策樹,自底向上對非葉子節(jié)點評估,若該節(jié)點的子樹用其葉節(jié)點能帶來泛化性能提升,那么將該子樹替換為葉節(jié)點。類標記為這個節(jié)點子樹中最頻繁的那個類
    image.png

    其中{1,2,3,6,7,10,14,15,16,17}為訓(xùn)練集,{4,5,8,9,11,12,13}為測試集
預(yù)剪枝

剪枝的目的就是為了簡化決策樹模型,避免過擬合
是對某節(jié)點生成前后的泛化性能做評估

  • 在劃分前要在訓(xùn)練集中選擇類別標記,類別標記通常選擇訓(xùn)練樣例數(shù)較多的,這里好瓜和壞瓜各為5,那就選擇好瓜作為訓(xùn)練標記吧。因此測試集中屬于類別標記的只有4、5、8正確率為3/7=42.9%


    image.png
  • 根據(jù)信息增益,按照臍部進行劃分。因為在訓(xùn)練集中臍部凹陷好瓜占比較多(3/5),臍部稍凹好瓜占比較多(2/5),臍部平坦壞瓜占多(2/5)因此


    image.png

    劃分后,結(jié)果如下:


    image.png
  • 臍部劃分基礎(chǔ)下,下一個最大信息增益的特征是色澤,劃分如下


    image.png

    劃分后,結(jié)果如下:


    image.png
  • 接著對臍部稍凹進行特征劃分,下一個信息增益最大化特征是根蒂
    image.png

    劃分后,結(jié)果如下:
    image.png

    因此泛化性為71%。
    由圖可知,預(yù)剪枝使得很多分支沒有展開,這不僅降低了過擬合的風(fēng)險,還顯著減少了決策樹的訓(xùn)練時間開銷和測試時間。但是,有些分支雖當前不能提升泛化性。甚至可能導(dǎo)致泛化性暫時降低,但在其基礎(chǔ)上進行后續(xù)劃分卻有可能導(dǎo)致顯著提高,因此預(yù)剪枝的這種貪心本質(zhì),給決策樹帶來了欠擬合的風(fēng)險。
后剪枝
  • 首先生成完整的樹,將測試集標注在上面


    image.png
  • 計算準確度


    image.png

    因此生成的額決策樹在測試集上準確率為42.9%。

  • 后剪枝是從底部向上剪枝,用葉節(jié)點代替。因為對應(yīng)的是訓(xùn)練集中7、15好壞占比相同,因此選擇好瓜進行標記


    image.png

    劃分結(jié)果如下:


    image.png

    因此按照底部紋理進行剪枝。
  • 接著向上剪,色澤部分:由于訓(xùn)練集中滿足這一條件的是6、7、15,好瓜多于懷掛,因此好瓜作為標記


    image.png

    劃分結(jié)果如下:


    image.png

    準確率不變,因此保留。
  • 然后看臍部凹陷分支,將色澤剪枝,訓(xùn)練集中1、2、3、14,好瓜多于壞瓜,因此選擇好瓜作為標記。


    image.png

劃分結(jié)果如下:


image.png

因此可以減掉。

  • 最后結(jié)果如下:


    image.png
結(jié)論:

對比預(yù)剪枝與后剪枝生成的決策樹,可以看出,后剪枝通常比預(yù)剪枝保留更多的分支,其欠擬合風(fēng)險很小,因此后剪枝的泛化性能往往由于預(yù)剪枝決策樹。但后剪枝過程是從底往上裁剪,因此其訓(xùn)練時間開銷比前剪枝要大。

信息增益率C4.5

正是因為ID3的缺點,引出了C4.5


image.png

image.png

C4.5能夠自動完成連續(xù)變量離散化,有N個樣本就需要離散化N-1,計算量很大,因此可以將連續(xù)變量從小到大排序,只有在決策樹型變化時才將它分開;

CART決策樹

使用基尼系數(shù)選取用來劃分數(shù)據(jù)集的特征,使用基尼值度量數(shù)據(jù)集的純度。
基尼系數(shù)越小純度越高,劃分的越徹底

image.png

三個特征,是否有房和婚姻狀況離散型變量,收入連續(xù)性變量。
步驟一:計算每個特征的基尼系數(shù)
假設(shè)k個類別,第k個類別概率為pk,那么基尼系數(shù)為:
image.png

image.png

image.png

步驟二:對于樣本D,如果特征A把樣本分位D1和D2,那么在特征A條件下,基尼系數(shù)為:


image.png

image.png
  • CART建立起來的是二叉樹,如果特征A有A1,A2,A3三個類別,CART會考慮把A分成{A1},{A2 ,A3}兩組,或者是其他兩種情況。


    image.png
  • 對于連續(xù)性變量,采用兩變量之間均值作為分裂點


    image.png

    連續(xù)變量中收入=97的基尼系數(shù)最小。
    步驟三:
    選擇基尼系數(shù)小的作為第一個特征,再根據(jù)確定下第一特征基礎(chǔ)上選擇下一個特征。

分類變量的評價指標

實際是正類預(yù)測為正類TF(第一個T代表正確與否,第二個F代表預(yù)測情況)
實際是負類預(yù)測為負類TP
實際是正類預(yù)測為負類FP
實際是負類預(yù)測為正類FP


image.png
  • 準確率
    準確率=預(yù)測正確的樣本/總樣本數(shù)=(TP+TN)/(TP+TN+FP+FN)
    對于有傾向性的問題不能用準確度衡量,比如:銀行好客戶990人壞客戶10人,模型把所有客戶判斷為好客戶準確度99%沒有任何意義。
  • 精確率
    精確率=正類預(yù)測為正的樣本數(shù)/預(yù)測為正樣本數(shù)=TP/(TP+FP)
  • 召回率
    召回率=正類預(yù)測為正的樣本數(shù)/實際為正的樣本數(shù)=TP/(TP+FN)
    比如銀行縮減業(yè)務(wù),盡可能抓住更多壞客,那么風(fēng)控要提高召回率recall,即實際為好客也被判斷為壞客;;銀行擴大業(yè)務(wù),盡可能減少好客誤抓率,那么風(fēng)控要提高精確率precision,即實際為壞客也被判斷為好客;所以,召回率和精確率無法平衡,因此引入Fscore,利用Recall和Precision的加權(quán)調(diào)和平均值作為衡量標準。
  • Fscore
    F值 = 精確率 * 召回率 * 2 / ( 精確率 + 召回率) 當精確率與召回率接近時,F(xiàn)值最大。
from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,recall_score
print(accuracy_score(ytest,y_pre))#準確率
print(precision_score(ytest,y_pre))#精確率
print(recall_score(ytest,y_pre))#召回率
print(confusion_matrix(ytest,y_pre))#得到的矩陣,橫向是實際值,縱向是預(yù)測值
1.4 回歸

回歸通俗解釋:包括兩個以上的自變量,且自變量與因變量是線性關(guān)系。對其進行訓(xùn)練模型,得到的結(jié)果是連續(xù)型變量就是線型回歸,結(jié)果是離散變量就是分類?;貧w用于預(yù)測。

1.41 線性回歸

image.png

這里的系數(shù)wi怎么求呢?常用的是最小二乘法,即實際值與預(yù)測值之間的誤差平方和最小時得出的公式。

  • 線型回歸評價指標
    (1)R方?jīng)Q定系數(shù)
    r方=ssr估計值與平均值誤差/sst真實值與估計值之間的誤差
    因為sst=ssr+sse估計值與真實值之間的誤差
    因此r方=1-sse/sst
    取值范圍[0,1]越接近于1擬合越好。
    (2)RMSE(平方根誤差)


    image.png

(3)MAE(平均絕對誤差)


image.png

(4)MSE(平均平方誤差)


image.png
from sklearn import linear_model
clf = linear_model.LinearRegression()
lcf.fit(x_train,y_train)
clf.coef_斜率
clf.intercept_截距
reg=clf.predict([x_test])注意這里需要列表格式
reg.score(x_test,y_test)r方,如果過擬合測試集的r方較小
reg.score(x_train,y_train)

from sklearn.metrics import mean_squared_error #均方誤差
from sklearn.metrics import mean_absolute_error #平方絕對誤差
from sklearn.metrics import r2_score#R square
#調(diào)用
mean_squared_error(y_test,y_predict)
mean_absolute_error(y_test,y_predict)
r2_score(y_test,y_predict)
1.42 邏輯回歸

邏輯回歸主要解決二分類0or1的問題,用于預(yù)估某件事發(fā)生的可能性。


sigmond函數(shù).png

為了實現(xiàn)邏輯回歸,需要在每個特征上乘以一個回歸系數(shù)讓預(yù)測值落在simgmond函數(shù)上,大于0.5算為1,小于0,5算為0。

from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(x_train,y_trian)
pre = model.predict(x_test)
accuracy_score(y_test, pre)計算準確率

2. 非監(jiān)督學(xué)習(xí)

2.1 KMeans聚類

步驟一:人為定義分多少簇K
步驟二:分配
將K個簇隨機扔進數(shù)據(jù)集中
步驟三:優(yōu)化
自由移動簇,標準簇就是與點的最短距離
步驟四:
重復(fù)二三步,直到簇不再變化位置

from sklearn.cluster import KMeans
kmeans=KMeans(n_cluster=8)
kmeans.fit(x_train)
kmeans.labels_#聚類的結(jié)果
pre = kmeans.predict(x_test)
KMeans(n_cluster=8,max_iter=300,n_init=10)n_cluster必須定義簇數(shù)量,max_iter算法迭代的次數(shù),n_init初始化的數(shù)量,跑10次在這里選擇最優(yōu)
  • 簇的k值如何定?
    取決于個人經(jīng)驗或者根據(jù)sse多多嘗試判斷
2.12 主成分分析PCA

降低數(shù)據(jù)維度,將大量特征縮減至幾個特征
原理解釋:
解釋1:將n維映射到k維上,k維被稱為主成分。假設(shè)有房屋面積x軸,房間數(shù)量y軸兩個數(shù)據(jù)關(guān)系構(gòu)成的二維散點圖,通過向量-映射成1維,旋轉(zhuǎn)。

image.png

解釋2:主成分要選擇數(shù)據(jù)集中最大(即最離散)方差那個方向,因此長軸是。因為當我們以最大方差維度進行映射時,能夠保留原始數(shù)據(jù)中最多的信息第一個新坐標軸是原始數(shù)據(jù)中方差最大的,第二個新坐標軸是第一個方差最大的,以此類推。
image.png

解釋3:如何找到最大方差呢?
當將二維映射至一維線上時,每個實際值與映射的新值距離代表相應(yīng)的信息量。
當我們將方差最大化時,實際上是舊點與其新點之間距離最小化,將丟失信息可能性也最小化。隨后我們發(fā)現(xiàn),大部分方差都包含在前面k個坐標軸中,后面坐標軸幾乎方差為0,我們可以忽略為0坐標實現(xiàn)降維處理。
image.png

解釋4:
將希望所有特征放在PCA中,PCA可以自動組合成新特征并對新特征能力等級劃分,

PCA定義:將輸入特征轉(zhuǎn)化為其主成分的系統(tǒng)化方式。然后將其用作回歸或分類模型中新特征。在所有特征數(shù)據(jù)中,會使方差最大化將映射時丟失信息可能性降至最低,然后對主成分進行等級劃分。數(shù)據(jù)因特定主成分產(chǎn)生的方差越大,該主成分級別越高,因此產(chǎn)生方差最大的主成分為第一個主成分。注意:主成分之間獨立不重疊。主成分等于輸入特征的數(shù)量。

from sklearn.decomposition import PCA
pca = PCA(n_components=2)#PCA(n_components=0.9)#小數(shù), 保證降維后的數(shù)據(jù)保持90%的信息
pca.fit(data)
pca.explained_varience_radio#方差比,如第一個主成分占比91%,第二個占比9%PCA(n_components=0.9)# 保證降維后的數(shù)據(jù)保持90%的信息
first_pca=PCA.components_[0]
sceond_pca=PCA.components_[1]
#成分是一個列表,包含所要求的主成分。
transfor_pca = pca.transform(data)
image.png

image.png
s = pca.explained_variance_
df = pd.DataFrame({'z':s,
                  'z_sum':s.cumsum()/s.sum()})
df['z_sum'].plot(linestyle = '--',marker = 'o')
plt.axhline(0.85)
  • 什么情況下使用pca?
    (1)希望得到隱藏特征
    (2)降維
    (3)PCA+SVM可以進行人臉識別

參考:

https://www.cnblogs.com/favor-dfn/p/12076601.htmlID3
https://www.cnblogs.com/wangleBlogs/p/11131505.htmlC4.5
https://blog.csdn.net/zfan520/article/details/82454814決策樹剪枝問題
https://www.cnblogs.com/gispathfinder/p/5770217.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容