sklearn使用技巧
sklearn上面對自己api的解釋已經做的淋漓盡致,但對於只需要短時間入手的同學來說,還是比較復雜的,下面將會列舉sklearn的使用技巧。
預處理
主要在sklearn.preprcessing包下。
規范化:
-
MinMaxScaler :最大最小值規范化
-
Normalizer :使每條數據各特征值的和為1
-
StandardScaler :為使各特征的均值為0,方差為1
編碼:
-
LabelEncoder :把字符串類型的數據轉化為整型
-
OneHotEncoder :特征用一個二進制數字來表示
-
Binarizer :為將數值型特征的二值化
-
MultiLabelBinarizer:多標簽二值化
特征抽取
包:sklearn.feature_extraction特征抽取是數據挖掘任務最為重要的一個環節,一般而言,它對最終結果的影響要高過數據挖掘算法本身。只有先把現實用特征表示出來,才能借助數據挖掘的力量找到問題的答案。特征選擇的另一個優點在於:降低真實世界的復雜度,模型比現實更容易操縱。一般最常使用的特征抽取技術都是高度針對具體領域的,對於特定的領域,如圖像處理,在過去一段時間已經開發了各種特征抽取的技術,但這些技術在其他領域的應用卻非常有限。
-
DictVectorizer: 將dict類型的list數據,轉換成numpy array
-
FeatureHasher : 特征哈希,相當於一種降維技巧
-
image:圖像相關的特征抽取
-
text: 文本相關的特征抽取
-
text.CountVectorizer:將文本轉換為每個詞出現的個數的向量
-
text.TfidfVectorizer:將文本轉換為tfidf值的向量
-
text.HashingVectorizer:文本的特征哈希
特征選擇
包:sklearn.feature_selection特征選擇的原因如下:(1)降低復雜度(2)降低噪音(3)增加模型可讀性
-
VarianceThreshold: 刪除特征值的方差達不到最低標准的特征
-
SelectKBest: 返回k個最佳特征
-
SelectPercentile: 返回表現最佳的前r%個特征
單個特征和某一類別之間相關性的計算方法有很多。最常用的有卡方檢驗(χ2)。其他方法還有互信息和信息熵。
chi2: 卡方檢驗(χ2)
降維
包:sklearn.decomposition
PCA:主成分分析算法(Principal Component Analysis, PCA)的目的是找到能用較少信息描述數據集的特征組合。它意在發現彼此之間沒有相關性、能夠描述數據集的特征,確切說這些特征的方差跟整體方差沒有多大差距,這樣的特征也被稱為主成分。這也就意味着,借助這種方法,就能通過更少的特征捕獲到數據集的大部分信息。
TruncatedSVD:通過奇異值分解(SVD)執行線性降維。與PCA相反,該估計器在計算奇異值分解之前不會使數據居中。這意味着它可以有效地使用scipy.sparse矩陣,常用於LSA。
KernelPCA:核主成分分析(KPCA)通過使用內核減少非線性維度。
模型評估
包:sklearn.metricssklearn.metrics包含評分方法、性能度量、成對度量和距離計算。分類結果度量參數大多是y_true和y_pred。
-
accuracy_score:分類准確度
-
condusion_matrix :分類混淆矩陣
-
classification_report:分類報告
-
precision_recall_fscore_support:計算精確度、召回率、f1
-
jaccard_similarity_score:計算jcaard相似度
-
hamming_loss:計算漢明損失
-
zero_one_loss:0-1損失
-
hinge_loss:計算hinge損失
-
log_loss:計算log損失
回歸結果度量
-
explained_varicance_score:可解釋方差的回歸評分函數
-
mean_absolute_error:平均絕對誤差
-
mean_squared_error:平均平方誤差
多標簽的度量
-
coverage_error:涵蓋誤差
-
label_ranking_average_precision_score:計算基於排名的平均誤差 (LRAP)
聚類的度量
-
adjusted_mutual_info_score:調整的互信息評分
-
silhouette_score:所有樣本的輪廓系數的平均值
-
silhouette_sample:所有樣本的輪廓系數
交叉驗證
包:sklearn.model_selection
-
KFold:K-Fold交叉驗證迭代器。接收元素個數、fold數、是否清洗
-
LeaveOneOut:LeaveOneOut交叉驗證迭代器
-
LeavePOut:LeavePOut交叉驗證迭代器
-
LeaveOneLableOut:LeaveOneLableOut交叉驗證迭代器
-
LeavePLabelOut:LeavePLabelOut交叉驗證迭代器
-
LeaveOneOut(n) 相當於 KFold(n, n_folds=n) 相當於LeavePOut(n, p=1)。
LeaveP和LeaveOne差別在於leave的個數,也就是測試集的尺寸。LeavePLabel和LeaveOneLabel差別在於leave的Label的種類的個數。LeavePLabel這種設計是針對可能存在第三方的Label,比如我們的數據是一些季度的數據。
-
train_test_split:分離訓練集和測試集(不是K-Fold)
-
cross_val_score:交叉驗證評分,可以指認cv為上面的類的實例
-
cross_val_predict:交叉驗證的預測。
網格搜索
包:sklearn.grid_search網格搜索最佳參數
-
GridSearchCV:搜索指定參數網格中的最佳參數
-
ParameterGrid:參數網格
-
ParameterSampler:用給定分布生成參數的生成器
-
RandomizedSearchCV:超參的隨機搜索
通過best_estimator_.get_params()方法,獲取最佳參數。
多分類、多標簽分類
包:sklearn.multiclass
-
OneVsRestClassifier:1-rest多分類(多標簽)策略
-
OneVsOneClassifier:1-1多分類策略
-
OutputCodeClassifier:1個類用一個二進制碼表示
朴素貝葉斯(Naive Bayes)
包:sklearn.naive_bayes
朴素貝葉斯的特點是分類速度快,分類效果不一定是最好的。
-
GasussianNB:高斯分布的朴素貝葉斯
-
MultinomialNB:多項式分布的朴素貝葉斯
-
BernoulliNB:伯努利分布的朴素貝葉斯
所謂使用什么分布的朴素貝葉斯,就是假設P(x_i|y)是符合哪一種分布,比如可以假設其服從高斯分布,然后用最大似然法估計高斯分布的參數。
回歸模型(Linear Model)
包:sklearn.linear_model
回歸算法中算法(函數)的最終結果是一個連續的數據值,輸入值(屬性值)是一個d維度的屬性/數值向量
-
LinearRegression:普通最小二乘線性回歸。
-
ElasticNet:將L1和L2組合作為正則化器的線性回歸。
-
Lasso:使用L1作為正則化器(也稱為Lasso)訓練的線性模型
-
Ridge:具有l2正則化的線性最小二乘法。
所謂使用什么分布的朴素貝葉斯,就是假設P(x_i|y)是符合哪一種分布,比如可以假設其服從高斯分布,然后用最大似然法估計高斯分布的參數。
集成學習(Ensemble Methods)
包:sklearn.ensemble
集成學習的思想是將若干個學習器(分類器&回歸器)組合之后產生一個新學習器。弱分類器(weak learner)指那些分類准確率只稍微好於隨機猜測的分類器(errorrate < 0.5);
-
AdaBoostClassifier(Regressor)算法會為每個樣本賦予一個權重,每次用訓練好的學習器標注/預測各個樣本,如果某個樣本點被預測的越正確,則將其權重降低;否則提高樣本的權重。
-
ExtraTreesClassifier(Regressor)Extra Tree會隨機的選擇一個特征值來划分決策樹
-
GradientBoostingClassifier(Regressor) ;GBDT也是迭代,但是GBDT要求弱學習器必須是CART模型,而且GBDT在模型訓練的時候,是要求模型預測的樣本損失盡可能的小。
-
IsolationForest 異常點檢測
-
RandomForestClassifier RF算法在實際應用中具有比較好的特性,應用也比較廣泛分類
-
RandomForestRegressor 回歸
KNN(K近鄰)
包:sklearn.neighbors
K近鄰(K-nearst neighbors, KNN)是一種基本的機器學習算法,所謂k近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。比如:判斷一個人的人品,只需要觀察與他來往最密切的幾個人的人品好壞就可以得出,即“近朱者赤,近墨者黑”;KNN算法既可以應用於分類應用中,也可以應用在回歸應用中。
-
KNeighborsClassifier實現k近鄰投票的分類器。
-
KNeighborsRegressor基於k-最近鄰居的回歸。通過與訓練集中的最近鄰居相關聯的目標的局部插值來預測目標。
-
KDTree KDTree用於快速廣義N點問題
Decision Trees(決策樹)
包:sklearn.tree
決策樹(Decision Tree)是在已知各種情況發生概率的基礎上,通過構建決策樹來進行分析的一種方式,是一種直觀應用概率分析的一種圖解法;決策樹是一種預測模型,代表的是對象屬性與對象值之間的映射關系;決策樹是一種樹形結構,其中每個內部節點表示一個屬性的測試,每個分支表示一個測試輸出,每個葉節點代表一種類別;決策樹是一種非常常用的有監督的分類算法
-
DecisionTreeClassifier(Regressor)決策樹分類器。
決策樹分為兩大類:分類樹和回歸樹,前者用於分類標簽值,后者用於預測連續值,常用算法有ID3、C4.5、CART等
聚類(clustering)
包:sklearn.cluster
聚類就是對大量未知標注的數據集,按照數據內部存在的數據特征將數據集划分為多個不同的類別,使類別內的數據比較相似,類別之間的數據相似度比較小;屬於無監督學習
K-means:也稱為K-平均或者K-均值,是一種使用廣泛的最基礎的聚類算法,一般作為掌握聚類算法的第一個算法。
K-Means++:該算法和K-Means算法的區別主要在於初始的K個中心點的選擇方面,K-Means算法使用隨機給定的方式,K-Means++算法采用下列步驟給定K個初始質點。
K-Means||:主要思路是改變每次遍歷時候的取樣規則,並非按照K-Means++算法每次遍歷只獲取一個樣本,而是每次獲取K個樣本,重復該取樣操作O(logn)次,然后再將這些抽樣出來的樣本聚類出K個點,最后使用這K個點作為K-Means算法的初始聚簇中心點。實踐證明:一般5次重復采用就可以保證一個比較好的聚簇中心點。
MiniBatch K-Means:采用小規模的數據子集(每次訓練使用的數據集是在訓練算法的時候隨機抽取的數據子集)減少計算時間,同時試圖優化目標函數;Mini Batch K-Means算法可以減少K-Means算法的收斂時間,而且產生的結果效果只是略差於標准K-Means算法。
BIRCH:算法(平衡迭代削減聚類法):聚類特征使用3元組進行一個簇的相關信息,通過構建滿足分枝因子和簇直徑限制的聚類特征樹來求聚類,聚類特征樹其實是一個具有兩個參數分枝因子和類直徑的高度平衡樹;分枝因子規定了樹的每個節點的子女的最多個數,而類直徑體現了對這一類點的距離范圍;非葉子節點為它子女的最大特征值;聚類特征樹的構建可以是動態過程的,可以隨時根據數據對模型進行更新操作。
DBSCAN :用一個點的ε鄰域內的鄰居點數衡量該點所在空間的密度,該算法可以找出形狀不規則的cluster,而且聚類的時候事先不需要給定cluster的數量。
SVM(支持向量機)
包:sklearn.svm
支持向量機(Support Vecor Machine, SVM)本身是一個二元分類算法,是對感知器算法模型的一種擴展,現在的SVM算法支持線性分類和非線性分類的分類應用,並且也能夠直接將SVM應用於回歸應用中,同時通過OvR或者OvO的方式我們也可以將SVM應用在多元分類領域中。在不考慮集成學習算法,不考慮特定的數據集的時候,在分類算法中SVM可以說是特別優秀的。
LinearSVC(SVR):線性支持向量分類。與參數kernel ='linear'的SVC類似,但是以liblinear而不是libsvm的形式實現,因此它在懲罰和損失函數的選擇方面具有更大的靈活性,並且應該更好地擴展到大量樣本。此類支持密集和稀疏輸入,並且多類支持是根據one-vs-the-rest方案處理的。
SVC(SVR):該實現基於libsvm。擬合時間至少與樣本數量成比例地縮放,並且在數萬個樣本之外可能是不切實際的。適用於大型數據集。
估計器(Estimator)
估計器,很多時候可以直接理解成分類器,主要包含兩個函數:
-
fit():訓練算法,設置內部參數接收訓練集和類別兩個參數。
-
predict():預測測試集類別,參數為測試集。
大多數scikit-learn估計器接收和輸出的數據格式均為numpy數組或類似格式。
轉換器(Transformer)
轉換器用於數據預處理和數據轉換,主要是三個方法:
-
fit():訓練算法,設置內部參數。
-
transform():數據轉換。
-
fit_transform():合並fit和transform兩個方法。
Pipeline(管道)
sklearn.pipeline包
pipeline的功能:
-
跟蹤記錄各步驟的操作(以方便地重現實驗結果)
-
對各步驟進行一個封裝
-
確保代碼的復雜程度不至於超出掌控范圍
scikit-learn擴展
scikit-learn通常要繼承sklearn.base包下的類。
-
BaseEstimator: 估計器的基類
-
ClassifierMixin :分類器的混合類
-
ClusterMixin:聚類器的混合類
-
RegressorMixin :回歸器的混合類
-
TransformerMixin :轉換器的混合類