探索性數據分析EDA(Exploratory Data Analysis)
EDA的主要工作是:對數據進行清洗,對數據進行描述(描述統計量,圖表),查看數據的分佈,比較數據之間的關係,培養對數據的直覺,對數據進行總結等。
基本步驟:
1.檢查數據:查看是否有缺失值,異常值,重複值等問題
數據類型分爲數值型,類別型,文本型,時間序列等。
主要考慮數值型(定量數據)和類別型(定性數據);
數值型又可以分爲連續型和離散型。
2.數據描述:.describe()函數:
生成描述性統計數據
總結數據分佈的集中趨勢、分散和形狀,
不包括 NaN值。
3.特徵相關性:crosstab()共生矩陣/交叉表,用於統計分組頻率的特殊透視表
4.特徵分佈
EDA總結
必要時對列名重命名
行列數data.shape,數據類型data.dtypes
data.info()同時查看這兩項
data.describe()查看連續變量的描述統計量
各列分別有多少缺失值data.apply(lambda x: sum(x.isnull()),axis=0)
各行分別有多少缺失值data.apply(lambda x: sum(x.isnull()),axis=1)
總共有多少行有缺失值
len(data.apply(lambda x: sum(x.isnull()),axis=1).nonzero()[0])
刪除重複值data.drop_duplicates()
-檢驗數據分佈
創建新的特徵
當特徵和目標變量並不是很相關時,可以修改輸入的數據集,應用線性、非線性變換(或者其他相似方法)來提高系統的精度。數據是“死”的,人的思維是“活”的。數據科學家負責改變數據集和輸入數據,使數據更好地符合分類模型。
基本方法:
-B. 特徵的非線性修正
1.特徵的線性修正
1)迴歸問題
從Sklearn工具包中加載數據——Python命令直接加載
2-1)計算均方誤差
from sklearn.metrics import mean_squared_error
mean_squared_error(測試標籤集,預測標籤集)
注意:不要混淆MSE和MAE
RMSE(Root Mean Square Error):均方根誤差,衡量觀測值與真實值之間的偏差,常用來作爲機器學習模型預測結果衡量的標準。
MSE(Mean square Error):均方誤差,真實值與預測值(估計值)差平方的期望。值越大,表明預測結果越差。
MAE(Mean Absolute Error):平均絕對誤差,是所有單個觀測值與算數平均值的偏差的絕對值的平均,可以更好的反應預測值誤差的實際情況
2-2)計算均方誤差:Z-scores標準化
(Z-scores標準化是將特徵映射爲均值爲0、標準差爲1的新特徵)
注意:Z-scores標準化屬於線性變換
Z-Score通過(x-)/將兩組或多組數據轉化爲無單位的Z-Score分值(目的就是將不同量級的數據統一轉化爲同一個量級),使得數據標準統一化,提高了數據可比性,消弱了數據解釋性。
1)總體數據的均值()
2)總體數據的標準差()
3)個體的觀測值(x)
Z-Score本身沒有實際意義,它的現實意義需要在比較中得以實現。
估算Z-Score需要總體的平均值與方差,但是這一值在真實的分析與挖掘中很難得到,大多數情況下是用樣本的均值與標準差替代。其次,Z-Score對於數據的分佈有一定的要求,正態分佈是最有利於Z-Score計算的。最後,Z-Score消除了數據具有的實際意義,A的Z-Score與B的Z-Score與他們各自的分數不再有關係,因此Z-Score的結果只能用於比較數據間的結果,數據的真實意義還需要還原原值。
2-3)計算均方誤差:魯棒性縮放
(魯棒縮放採用中位數和IQR對每個特徵進行單獨縮放)
注意:魯棒性縮放屬於線性變換
魯棒性:魯棒是Robust(adj.強健的,健康的)的音譯,它是在異常和危險情況下系統生存的關鍵,例如:計算機軟件在輸入錯誤、磁盤故障、網絡過載或有意攻擊情況下,能否不死機,不崩潰,就是該軟件的魯棒性。即控制系統在一定的參數變動下,維護其他某些性能的特性
魯棒性縮放(RobustScaler):採用中位數和IQR(四分位距)對每個特徵進行單獨縮放。
由於數據讀入缺失、傳輸錯誤或傳感器損壞等原因,如果有一個或一些點原理中心,這些異常數據對均值和方差影響較大,但對中位數和四分位數影響不大,因此魯棒縮放對於異常值更魯棒
2.特徵的非線性修正
創建新特徵
例如:假定輸出結果與房屋居住人數大致相關:
但我們可以將房屋佔用率的平方根作爲新特徵
注意:numpy.sqrt()屬於非線性變換
維數約簡
當數據集中包含大量特徵時:
只保留有意義的特徵不僅可以使數據集易於管理,而且可以使預測結果不受數據中噪聲的影響,預測精度更好。
維數約減
消除輸入數據集的某些特徵,創建一個有限特徵的數據集(包含所有需要的信息),以更有效的方式預測目標變量。
注:多數維數約簡算法的一個主要假設:
數據包含加性高斯白噪聲。
維數約簡可以減少噪聲的集合跨度,以此減少噪聲的能量。
噪聲數據:是指數據中存在着錯誤或異常(偏離異常值)的數據,這些數據對數據分析造成了干擾。即無意義數據,現階段的意義已經擴展到包含所有難以被機器正確理解和翻譯的數據,如非結構化文本。任何不可被源程序讀取和運用的數據,不管是已經接受、存貯的還是改變的,都成爲噪聲。
加性高斯白噪聲(AWGN:Additive White Gaussian Noise)是最基本的噪聲和干擾模型
加性噪聲:疊加在信號上的一種噪聲,,通常記爲n(t),而且無論有無信號,噪聲n(t)都是始終存在的。因此通常稱它爲加性噪聲或者加性干擾。
白噪聲:噪聲的功率譜密度在所有得頻率上均爲一個常數,則稱這樣的噪聲爲白噪聲,如果白噪聲取值的概率分佈服從高斯分佈,則稱這樣的噪聲爲高斯白噪聲。
當波的功率頻譜密度乘以一個適當的係數後將得到每單位頻率波攜帶的功率,這被稱爲信號的功率譜密度。
1.協方差矩陣
協方差是對兩個隨機變量聯合分佈線性相關程度的一種度量。
隨機變量X、Y的協方差:
cov(X, Y) = cov(Y, X)
隨機變量X與自身的協方差就是X的方差:
1-1)兩個隨機變量越線性相關,協方差越大
1-2)線性無關,協方差爲0
2.相關係數:
相關係數(Correlation coefficient) 是按積差方法計算,同樣以兩變量與各自平均值的離差爲基礎,通過兩個離差相乘來反映兩變量之間相關程度。
2-1)相關係數取值在-1~1之間
2-2)相關係數爲0時,稱兩個變量不相關
2-3)相關係數爲1,兩個變量完全相關,即具有線性關係
2-4)越接近0,變量相似度越小
2-5)越接近1,變量相似度越大
2-6)相關係數>0.8,高度相關;相關係數<0.3,低度相關,其他中度相關
例子:
X=[1.1, 1.9, 3]
Y=[5.0, 10.4, 14.6]
X,Y的協方差計算:
E(X) = (1.1+1.9+3)/3 =2
E(Y) = (5.0+10.4+14.6)/3 =10
E(XY)=(1.1×5.0+1.9×10.4+3×14.6)/3 = 23.02
Cov(X,Y)=E(XY)-E(X)E(Y) = 23.02-2×10 =3.02
X,Y的相關係數:
D(X)=E(X^2)-E^2(X)=(1.1^2+1.9^2+3^2)/3 – 4 = 0.6
σx=sqrt(D(X)) =0.77
D(Y)=E(Y^2)-E^2(Y)=(5^2+10.4^2+14.6^2)/3-100 = 15.44
σy=sqrt(D(Y)) =3.93
r(X,Y)=Cov(X,Y)/(σxσy)=3.02/(0.77×3.93) = 0.9979
注意:不要混淆協防差矩陣cov()和相關係數矩陣corrcoef()
相關矩陣也叫相關係數矩陣,其是由矩陣各列間的相關係數構成的。也就是說,相關矩陣第i行第j列的元素是原矩陣第i列和第j列的相關係數。
兩個矩陣都是對稱矩陣。
3.矩陣圖形化:熱力圖heatmap()
import seaborn as sns
Import matplotlib.pyplot as plt
sns.heatmap(協方差矩陣,annot=True)
注意:參數annot默認False,True指的是熱力圖對應方格寫入數據
相關特徵可能包含相似屬性,因而可以約減高度相關特徵。
維數約減算法有很多,如PCA、LFA、LDA、LSA、ICA、T-SNE等。
4.主成分分析PCA
主成分分析 (Principal(主要的) Component(組成部分) Analysis, PCA),又稱主元分析、主分量分析,旨在利用降維的思想簡化數據。
PCA的主要思想是通過對原始變量相關矩陣內部結構的關係研究,找出影響效果某一要素的幾個綜合指標,使綜合指標爲原來變量的線性擬合。
將m維特徵映射到p維上,這p維是新的正交特徵,被稱爲主成分。
p維特徵是在原有m維特徵的基礎上重新構造出來的,不僅保留了原始變量的主要信息,且彼此間不相關,又比原始變量具有某些更優越的性質。
4-1)算法步驟:
·對所有的樣本進行中心化,標準化,歸一化,白化等
·計算樣本的協方差矩陣
·對矩陣X特徵值分解
·取出最大n個特徵值對應的特徵向量,標準化後組成特徵向量矩陣W
·對樣本轉化
·得到輸出樣本
4-2)PCA常用參數(PCA(n_components=None, copy=True, whiten=False))
·n_components=None 保留主成分個數,賦值爲字符串自動選取。
類型:int 或者 string,缺省時默認爲None,所有成分被保留。
賦值爲int,如n_components=1,將把原始數據降到一個維度;
賦值爲string,如n_components='mle',將自動選取特徵個數n,使得滿足所要求的方差百分比。
·copy=True 是否複製原始訓練數據
若爲True,則在原始數據的副本上進行運算後,原始訓練數據的值不會有任何改變,缺省時默認爲True;
若爲False,則運行PCA算法後,原始訓練數據的值改變。
·whiten=False 白化,每個特徵具有相同方差
·svd_solver=’full’ 指定奇異值分解SVD的方法,有4個可選值:{‘auto’, ‘full’, ‘arpack’, ‘randomized’}
SVD(奇異值分解):通過SVD對數據的處理,我們可以使用小得多的數據集來表示原始數據集,這實際上是去除了噪聲和冗餘信息,以此到達了優化數據,提高結果的目的。
優點:簡化數據,去除噪聲,提高算法的結果 |
缺點:數據的轉換可能難以理解 |
適用於數據類型:數值型 |
Randomized PCA
Scikit-Learn提供了一種基於隨機SVD(Randomized SVD)的更快的算法,它是一種更輕的、近似迭代分解的方法。
做矩陣分解時,隨機SVD比經典SVD算法速度更快,只需要幾個步驟就能與經典算法結果極其近似。因此,當訓練數據集很大時,它是一個很好的選擇。
當數據集的規模非常小時, Randomized PCA輸出結果與經典PCA相當接近,但當這兩種算法應用於大數據集時,其對比結果會顯著不同。
4-3)舉例
from sklearn.decomposition import PCA
pca=PCA(n_components=2)
pca.fit_transform(訓練數據集)
5.潛在因素分析LFA
一科成績好的學生,往往其他各科成績也比較好
→學生的各科成績之間存在着一定的相關
→是否存在某些潛在的共性因子影響着學生的學習成績?
用潛在變量解釋觀察變量的數學模型稱爲潛變量模型。
PCA中每個主成分不具有特定的含義,爲此提出了因子分析,通過尋找潛在因子獲得觀測變量的潛在結構,即潛變量分析 (Latent Factor(潛在因素) Analysis, LFA)。LFA主要目的是用來描述隱藏在測量變量中的一些更基本,但又無法直接測量到的隱性變量。
LFA不需要對輸入信號進行正交分解,其算法假設是:數據中的觀測變量是潛變量經過線性變換後的值,並且具有可分離的噪聲(AWG任意波形發生器生成的噪聲)。
6.線性判別分析LDA
線性判別分析(Linear(線性的) Discriminant(判別式) Analysis,LDA)是一種經典的線性學習方法,試圖找到兩類物體/事件特徵的一個線性組合,以能夠特徵化或區分它們。LDA是線性分類器,也可以爲分類做降維處理。
1.算法思想:
給定訓練樣例集,設法將樣例投影到一條直線上,使得同類樣例的投影點儘可能接近,異樣樣例的投影點儘可能遠離;在對新樣本進行分類時,將其投影到同樣的直線上,再根據投影點的位置來確定新樣本的類別。
2.LDA與PCA區別
- PCA(主成分分析)尋找數據集中方差最大的方向作爲主成分分量的軸,爲了方差最大化→ 投影到左邊
- LDA(線性判別分析)投影后類內方差最小,類間方差最大→ 投影到下面
相同點:(1)均可以對數據進行降維;
(2)均使用了矩陣特徵分解的思想;
(3)均假設數據符合高斯分佈。
不同點: (1) LDA是有監督降維,PCA是無監督降維;
(2) LDA降維最多降到類別數k-1的維度,PCA沒有該限制;
(3) LDA可用於降維,還可用於分類;
(4)LDA選擇分類性能最好的投影方向,
PCA選擇樣本點投影具有最大方差的方向。
3.LDA優點與缺點
優點:
(1)LDA可以使用類別先驗知識,無監督學習無法使用類別先驗知識。
(2)樣本分類信息依賴均值而不是方差時,LDA比PCA算法較優。
缺點:
(1)LDA不適合對非高斯分佈樣本進行降維,PCA也有這個問題;
(2)若降維維度大於k-1,不能使用LDA(有一些LDA的進化版可以繞過這個問題);
(3)LDA在樣本分類信息依賴方差而不是均值時,降維效果不好;
(4)LDA可能過度擬合數據。
7.潛在語義分析LSA
潛在語義分析(Latent Semantical Analysis,LSA)是一種信息檢索模型,使用統計方法對大量文本集進行分析,提取詞與詞之間潛在的語義結構,並用提取的潛在語義結構表示詞和文本,消除詞之間的相關性和簡化文本向量,實現降維的目的,通常應用於經過TfidfVectorizer或CountVectorizer處理的文本分析中。
1.基本思想:
把高維向量空間模型表示中的文檔映射到低維的潛在語義空間中,這個映射是通過對項/文檔矩陣(輸入數據集通常是一個稀疏矩陣)的奇異值分解來實現,產生具有相同概念詞語的語義集合。
2.CountVectorize
只考慮詞彙在文本中出現的頻率
3.TfidfVectorizer
考慮詞彙在文本出現的頻率,並關注包含該詞彙的所有文本的數量,能夠削減高頻沒有意義的詞彙出現帶來的影響, 挖掘更有意義的特徵
Truncated SVD 是截斷SVD的變形,對樣本矩陣進行分解,只計算用戶指定的最大的K個奇異值。
8.獨立成分分析ICA
1.基本概念
獨立成分分析(Independent Component Analysis,ICA)是從多維統計數據中尋找潛在因子或成分的一種方法。
ICA與其它方法的重要區別在於,尋找滿足統計獨立和非高斯的成分。
2.ICA與PCA區別
- PCA 假設源信號間彼此非相關,ICA 假設源信號間彼此獨立;
- PCA認爲主元之間彼此正交,樣本呈高斯分佈; ICA則不要求樣本呈高斯分佈。
9.核主成分分析Kernel PCA
核主成分分析(Kernel PCA)是PCA的擴展,通過非線性映射將數據轉換到一個高維空間中,在高維空間中使用PCA進行降維。
- 引入非線性映射函數,將原空間中的數據映射到高維空間,∅∅是隱函數
- 引入一個定理:空間中的任一向量都可以由該空間中的所有樣本線性表示
核函數:通過兩個向量點積來度量向量間相似度的函數。
通過使用核技巧,可以在原始特徵空間中計算兩個高維特徵空間中向量的相似度。最常用的內核有linear、poly、RBF、sigmoid和cosine。
變爲
10.T-分佈鄰域嵌入算法 T-SNE
T-分佈領域嵌入 (T-distributed Stochastic Neighbor Embedding,T-SNE )算法是目前一個非常流行的對高維度數據進行非線性降維的算法。
基本思路:
爲高維特徵空間在二維平面/三維超平面上尋找一個投影,使得在原本的n維空間中相距很遠的數據點在平面上同樣相距較遠,而原本相近的點在平面上仍然相近。
本質上,領域嵌入尋找 保留樣本的鄰居關係的 新的低維度數據表示。
爲高維特徵空間在二維三維平面上尋找投影,使近的還是近,遠的還是遠,保留鄰居關係,用新的低維度數據表示
算法規則:
- 遞歸的相似觀測必須對輸出有更大的貢獻
——用概率分佈函數實現;
- 高維空間的分佈必須與低維空間的分佈相似
—— 用最小化KL距離實現;
11.受限玻爾茲曼機 RBM
玻爾茲曼機(Boltzman machine,BM) 是一種基於能量函數的建模方法,能夠描述變量之間的高階相互作用,所建模型和學習算法有比較完備的物理解釋和嚴格的數理統計理論作基礎。
BM是一種二值型(0或1)隨機神經網絡:
- 由可見層和隱層組成
- 網絡節點分爲可見單元(visible unit)和隱單元(hidden unit)
- 通過權值表達單元之間的相關性
- 使用了玻爾茲曼分佈作爲激活函數
- 原理是模擬退火算法
V表示所有可見單元,h表示所有隱單元
層間、層內全連接
受限玻爾茲曼機(Restricted BM,RBM)是BM的一種特殊拓撲結構:
RBM是一個概率模型
RBM是結合線性函數(隱層神經元)對輸入數據進行非線性變換的方法
層間全連接、層內無連接
- 當給定可見層神經元狀態時,
各隱層神經元之間是否激活條件獨立;
- 當給定隱層神經元狀態時,
各可見層神經元之間是否激活條件獨立。
異常數據的檢測與處理
樣本中顯著偏離其他數值的數據稱爲異常值(Outlier),其他預期的觀測值標記爲正常值或內點(Inlier)。
單變量異常檢測
什麼是極端值?
- 使用Z-scores時,得分絕對值高於3的觀測值爲可疑異常值
- 如果觀測量是數據描述,以下兩種數據當作可疑異常值,
- 第一種是比25分位值減去IQR*1.5小的觀測量
- 第二種是比75分位值加上IQR*1.5大的觀測量
注:IQR(Inter quartile range)是四分位距,即75分位值與25分位值的差。
如何使用Z-scores檢測異常值?
- 使用sklearn中StandardScaler函數對所有連續變量進行標準化,找到那些絕對值大於3倍標準差的值。
單變量方法可以檢測出相當多潛在異常值,但是,它不能檢測那些不是極端值的異常值。
如果變量本身不是極端值,而它與其它變量或多個變量組合後出現不正常值,如何檢測?
——可以先使用維數約簡算法,再檢查絕對值超過三倍標準偏差的成分。
Scikit-learn庫提供了可直接使用並自動標出所有可疑實例的類:
covariance.EllipticEnvelope類:適合魯棒的數據分佈估計,由於異常值是數據總體分佈中的極值點,它能夠指出數據中的異常值。
svm.OneClassSVM類:可以模擬數據的形狀,找出任何新的實例是否屬於原來的類(默認情況下假定數據中沒有異常值)。修改其參數後能作用於有異常值的數據集,比EllipticEnvelope系統更強大、更可靠。
EllipticEnvelope
假設全部數據可以表示成基本的多元高斯分佈,EllipticEnvelope函數試圖找出數據總體分佈關鍵參數。儘可能簡化算法背後的複雜估計,可認爲該算法主要是檢查每個觀測量與總均值的距離。
由於總均值要考慮數據集中所有變量,該算法能夠同時發現單變量和多變量的異常值。
Covariance.EllipticEnvelope函數使用時需要考慮污染參數(contamination parameter) ,該參數是異常值在數據集中的比例,默認取值爲0.1,最高取值爲0.5。
注:鑑於標準正態分佈中觀測值落在距離均值大於3(Z-score距離)區域的百分比是0.01-0.02,作爲初始值,建議污染參數取值爲0.01-0.02。
EllipticEnvelope算法的侷限性
EllipticEnvelope函數適用於有控制參數的高斯分佈假設,使用時要注意:非標化的數據、二值或分類數據與連續數據混合使用可能引發錯誤和估計不準確。
EllipticEnvelope函數假設全部數據可以表示成基本的多元高斯分佈,當數據中有多個分佈時,算法試圖將數據適應一個總體分佈,傾向於尋找最偏遠聚類中的潛在異常值,而忽略了數據中其他可能受異常值影響的區域。
OneClassSVM
OneClassSVM是一種機器學習方法:
- 通過學習知道數據應該服從什麼分佈
- 適用於具有更多變量的數據集
- 檢查新的樣本是否符合以前的數據分佈
參數有kernel、degree、gamma和nu:
- Kernel和Degree:這兩個參數是相關的,
通常建議取默認值kernel爲rbf,degree爲3。
- Gamma:與rbf核相關的參數,建議設置越低越好。
- Nu: 決定模型是否必須符合一個精確的分佈,
如果有異常值存在,Nu是必選參數。如果異常值比例很小,則Nu也會很小,反之很大。
驗證指標
使用scikit-learn構建模型
1.加載datasets模塊中數據集
2.將數據集劃分爲訓練集和測試集 train_test_split()
在數據分析過程中,爲了保證模型在實際系統中能夠起到預期作用,一般需要將樣本分成獨立的三部分:
- 訓練集(train set):用於估計模型。
- 驗證集(validation set):用於確定網絡結構或者控制模型複雜程度的參數。
- 測試集(test set):用於檢驗最優的模型的性能。
sklearn.model_selection.train_test_split(*arrays, **options)
參數名稱 |
說明 |
*arrays |
接收一個或多個數據集。代表需要劃分的數據集,若爲分類迴歸則分別傳入數據和標籤,若爲聚類則傳入數據。無默認。 |
test_size |
接收float,int,None類型的數據。代表測試集的大小。如果傳入的爲float類型的數據則需要限定在0-1之間,代表測試集在總數中的佔比;如果傳入爲int類型的數據,則表示測試集記錄的絕對數目。該參數與train_size可以只傳入一個。在0.21版本前,若test_size和train_size均爲默認則testsize爲25%。 |
train_size |
接收float,int,None類型的數據。代表訓練集的大小。該參數與test_size可以只傳入一個。 |
random_state |
接收int。代表隨機種子編號,相同隨機種子編號產生相同的隨機結果,不同的隨機種子編號產生不同的隨機結果。默認爲None。 |
shuffle |
接收boolean。代表是否進行有放回抽樣。若該參數取值爲True則stratify參數必須不能爲空。 |
stratify |
接收array或者None。如果不爲None,則使用傳入的標籤進行分層抽樣。 |
- Øtrain_test_split函數根據傳入的數據,分別將傳入的數據劃分爲訓練集和測試集。
- Ø如果傳入的是1組數據,那麼生成的就是這一組數據隨機劃分後訓練集和測試集,總共2組。如果傳入的是2組數據,則生成的訓練集和測試集分別2組,總共4組。
- Øtrain_test_split是最常用的數據劃分方法,在model_selection模塊中還提供了其他數據集劃分的函數,如PredefinedSplit,ShuffleSplit等。
3.K折交叉驗證法
- 當數據總量較少的時候,使用上面的方法將數據劃分爲三部分就不合適了。
- 常用的方法是留少部分做測試集,然後對其餘N個樣本採用K折交叉驗證法,基本步驟如下:
- 將樣本打亂,均勻分成K份。
- 輪流選擇其中K-1份做訓練,剩餘的一份做驗證。
- 計算預測誤差平方和,把K次的預測誤差平方和的均值作爲選擇最優模型結構的依據。
4.使用sklearn轉換器進行數據預處理與降維
sklearn轉換器三個方法
sklearn把相關的功能封裝爲轉換器(transformer)。使用sklearn轉換器能夠實現對傳入的NumPy數組進行標準化處理,歸一化處理,二值化處理,PCA降維等操作。轉換器主要包括三個方法:
方法名稱 |
說明 |
fit |
fit方法主要通過分析特徵和目標值,提取有價值的信息,這些信息可以是統計量,也可以是權值係數等。 |
transform |
transform方法主要用來對特徵進行轉換。從可利用信息的角度可分爲無信息轉換和有信息轉換。無信息轉換是指不利用任何其他信息進行轉換,比如指數和對數函數轉換等。有信息轉換根據是否利用目標值向量又可分爲無監督轉換和有監督轉換。無監督轉換指只利用特徵的統計信息的轉換,比如標準化和PCA降維等。有監督轉換指既利用了特徵信息又利用了目標值信息的轉換,比如通過模型選擇特徵和LDA降維等。 |
fit_transform |
fit_transform方法就是先調用fit方法,然後調用transform方法。 |
sklearn部分預處理函數與其作用
函數名稱 |
說明 |
MinMaxScaler |
對特徵進行離差標準化。 |
StandardScaler |
對特徵進行標準差標準化。 |
Normalizer |
對特徵進行歸一化。 |
Binarizer |
對定量特徵進行二值化處理。 |
OneHotEncoder |
對定性特徵進行獨熱編碼處理。 |
FunctionTransformer |
對特徵進行自定義函數變換。 |
構建並評價聚類模型
聚類的輸入是一組未被標記的樣本,聚類根據數據自身的距離或相似度將他們劃分爲若干組,劃分的原則是組內樣本最小化而組間(外部)距離最大化,如圖所示。
1、聚類方法類別
算法類別 |
包括的主要算法 |
劃分(分裂)方法 |
K-Means算法(K-平均),K-MEDOIDS算法(K-中心點)和CLARANS算法(基於選擇的算法)。 |
層次分析方法 |
BIRCH算法(平衡迭代規約和聚類),CURE算法(代表點聚類)和CHAMELEON算法(動態模型)。 |
基於密度的方法 |
DBSCAN算法(基於高密度連接區域),DENCLUE算法(密度分佈函數)和OPTICS算法(對象排序識別)。 |
基於網格的方法 |
STING算法(統計信息網絡),CLIOUE算法(聚類高維空間)和WAVE-CLUSTER算法(小波變換)。 |
2、聚類算法模塊cluster提供的聚類算法
函數名稱 |
參數 |
適用範圍 |
距離度量 |
KMeans |
簇數 |
可用於樣本數目很大,聚類數目中等的場景。 |
點之間的距離 |
Spectral clustering |
簇數 |
可用於樣本數目中等,聚類數目較小的場景。 |
圖距離 |
Ward hierarchical clustering |
簇數 |
可用於樣本數目較大,聚類數目較大的場景。 |
點之間的距離 |
Agglomerative clustering |
簇數,鏈接類型,距離 |
可用於樣本數目較大,聚類數目較大的場景。 |
任意成對點線圖間的距離 |
DBSCAN |
半徑大小,最低成員數目 |
可用於樣本數目很大,聚類數目中等的場景。 |
最近的點之間的距離 |
Birch |
分支因子,閾值,可選全局集羣 |
可用於樣本數目很大,聚類數目較大的場景。 |
點之間的歐式距離3、 |
3、sklearn估計器estimator的方法
聚類算法實現需要sklearn估計器(estimator)。sklearn估計器和轉換器類似,擁有fit和predict兩個方法。兩個方法的作用如下。
方法名稱 |
說明 |
fit |
fit方法主要用於訓練算法。該方法可接收用於有監督學習的訓練集及其標籤兩個參數,也可以接收用於無監督學習的數據。 |
predict |
predict用於預測有監督學習的測試集標籤,亦可以用於劃分傳入數據的類別。 |
4、聚類模型評價指標
聚類評價的標準是組內的對象相互之間是相似的(相關的),而不同組中的對象是不同的(不相關的)。即組內的相似性越大,組間差別越大,聚類效果就越好。sklearn的metrics模塊提供的聚類模型評價指標。
方法名稱 |
真實值 |
最佳值 |
sklearn函數 |
ARI評價法(蘭德係數) |
需要 |
1.0 |
adjusted_rand_score |
AMI評價法(互信息) |
需要 |
1.0 |
adjusted_mutual_info_score |
V-measure評分 |
需要 |
1.0 |
completeness_score |
FMI評價法 |
需要 |
1.0 |
fowlkes_mallows_score |
輪廓係數評價法 |
不需要 |
畸變程度最大 |
silhouette_score |
Calinski-Harabasz指數評價法 |
不需要 |
相較最大 |
calinski_harabaz_score |
構建並評價分類模型
sklearn庫常用分類算法函數
模塊名稱 |
函數名稱 |
算法名稱 |
linear_model |
LogisticRegression |
邏輯斯蒂迴歸 |
svm |
SVC |
支持向量機 |
neighbors |
KNeighborsClassifier |
K最近鄰分類 |
naive_bayes |
GaussianNB |
高斯樸素貝葉斯 |
tree |
DecisionTreeClassifier |
分類決策樹 |
ensemble |
RandomForestClassifier |
隨機森林分類 |
ensemble |
GradientBoostingClassifier |
梯度提升分類樹 |
分類模型的評價指標
方法名稱 |
最佳值 |
sklearn函數 |
Precision(精確率) |
1.0 |
metrics.precision_score |
Recall(召回率) |
1.0 |
metrics.recall_score |
F1值 |
1.0 |
metrics.f1_score |
Cohen’s Kappa係數 |
1.0 |
metrics.cohen_kappa_score |
ROC曲線 |
最靠近y軸 |
metrics. roc_curve |
- 除了使用數值,表格形式評估分類模型的性能,還可通過繪製ROC曲線的方式來評估分類模型。
- ROC曲線橫縱座標範圍爲[0,1],通常情況下ROC曲線與X軸形成的面積越大,表示模型性能越好。但是當ROC曲線處於下圖中藍色虛線的位置,就表明了模型的計算結果基本都是隨機得來的,在此種情況下模型起到的作用幾乎爲零。故在實際中ROC曲線離圖中藍色虛線越遠表示模型效果越好。
構建並評價迴歸模型
常用迴歸模型
迴歸模型名稱 |
適用條件 |
算法描述 |
線性迴歸 |
因變量與自變量是線性關係 |
對一個或多個自變量和因變量之間的線性關係進行建模,可用最小二乘法求解模型係數。 |
非線性迴歸 |
因變量與自變量之間不都是線性關係 |
對一個或多個自變量和因變量之間的非線性關係進行建模。如果非線性關係可以通過簡單的函數變換轉化成線性關係,用線性迴歸的思想求解;如果不能轉化,用非線性最小二乘方法求解。 |
Logistic迴歸 |
因變量一般有1和0(是與否)兩種取值 |
是廣義線性迴歸模型的特例,利用Logistic函數將因變量的取值範圍控制在0和1之間,表示取值爲1的概率。 |
嶺迴歸 |
參與建模的自變量之間具有多重共線性 |
是一種改進最小二乘估計的方法。 |
主成分迴歸 |
參與建模的自變量之間具有多重共線性 |
主成分迴歸是根據主成分分析的思想提出來的,是對最小二乘法的一種改進,它是參數估計的一種有偏估計。可以消除自變量之間的多重共線性。 |
sklearn庫常用迴歸算法函數
模塊名稱 |
函數名稱 |
算法名稱 |
linear_model |
LinearRegression |
線性迴歸 |
svm |
SVR |
支持向量迴歸 |
neighbors |
KNeighborsRegressor |
最近鄰迴歸 |
tree |
DecisionTreeRegressor |
迴歸決策樹 |
ensemble |
RandomForestRegressor |
隨機森林迴歸 |
ensemble |
GradientBoostingRegressor |
梯度提升迴歸樹 |
迴歸模型評價指標
- 迴歸模型的性能評估不同於分類模型,雖然都是對照真實值進行評估,但由於迴歸模型的預測結果和真實值都是連續的,所以不能夠求取Precision、Recall和F1值等評價指標。迴歸模型擁有一套獨立的評價指標。
- 平均絕對誤差、均方誤差和中值絕對誤差的值越靠近0,模型性能越好。可解釋方差值和R方值則越靠近1,模型性能越好。
方法名稱 |
最優值 |
sklearn函數 |
平均絕對誤差 |
0.0 |
metrics. mean_absolute_error |
均方誤差 |
0.0 |
metrics. mean_squared_error |
中值絕對誤差 |
0.0 |
metrics. median_absolute_error |
可解釋方差值 |
1.0 |
metrics. explained_variance_score |
R方值 |
1.0 |
metrics. r2_score |
使用scikit-learn構建模型小結
- sklearn數據分析技術的基本任務主要體現在聚類、分類和迴歸三類。
- 每一類又有對應的多種評估方法,能夠評價所構建模型的性能優劣。
模型評估與選擇
1.評估方法
1-1)留出法
- 訓練集+測試集:互斥互補
- 訓練集訓練模型,測試集測試模型
- 合理劃分、保持比例
- 單次留出與多次留出
- 多次留出法:如對專家樣本隨機進行100次訓練集/測試集劃分,評估結果取平均
1-2)交叉驗證法
- K折交叉驗證:將專家樣本等份劃分爲K個數據集,輪流用K-1個用於訓練,1個用於測試
- P次K折交叉驗證
1-3)自助法
2.性能度量
2-1)均方誤差
2-2)錯誤率和精度:
錯誤率:分類錯誤樣本數佔總樣本數比例
精度:1-錯誤率,分類正確樣本數佔總樣本數比例
2-3)查準率和查全率
2-4)F1係數
3.偏差與方差
泛化錯誤率的構成:偏差+方差+噪聲
- 偏差:模型輸出與真實值的偏離程度,刻畫了算法的擬合能力
- 方差:同樣大小的訓練集的變動導致的學習性能的變化,即數據擾動造成的影響
- 噪聲:當前學習器所能達到的泛化誤差的下限
偏差大:擬合不足/欠擬合;方差大:過擬合