目錄
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.50.10.5
P(chirs|工作、生活)=0.50.3*0.6
from sklearn import GaussianNB
clf = GaussianNB()
clf.fit(xtrain,ytrian)
pre = clf.predict(xtest)
計算分類器的準確率:
clf.score()
*補充說明樸素貝葉斯算法原理:

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

- 在這個公式里,因為 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)練點分類正確。

雖然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é)果,適當停止分類,如果屬性過多容易過擬合,過少容易欠擬合。

過擬合和欠擬合
過擬合:模型被訓(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é)點。
舉例說明:

選擇溫度、濕度、刮風(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

步驟二:
分別計算三個特征的熵,溫度舉例,已知溫度高(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)系也可知)

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

步驟四:
繼續(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é)果如下:

因此可以減掉。
-
最后結(jié)果如下:
image.png
結(jié)論:
對比預(yù)剪枝與后剪枝生成的決策樹,可以看出,后剪枝通常比預(yù)剪枝保留更多的分支,其欠擬合風(fēng)險很小,因此后剪枝的泛化性能往往由于預(yù)剪枝決策樹。但后剪枝過程是從底往上裁剪,因此其訓(xùn)練時間開銷比前剪枝要大。
信息增益率C4.5
正是因為ID3的缺點,引出了C4.5


C4.5能夠自動完成連續(xù)變量離散化,有N個樣本就需要離散化N-1,計算量很大,因此可以將連續(xù)變量從小到大排序,只有在決策樹型變化時才將它分開;
CART決策樹
使用基尼系數(shù)選取用來劃分數(shù)據(jù)集的特征,使用基尼值度量數(shù)據(jù)集的純度。
基尼系數(shù)越小純度越高,劃分的越徹底

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



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


-
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

- 準確率
準確率=預(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 線性回歸

這里的系數(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(平均絕對誤差)

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

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ā)生的可能性。

為了實現(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)。

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

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

解釋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)


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


















