<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          機(jī)器學(xué)習(xí)之sklearn基礎(chǔ)教程!

          共 3175字,需瀏覽 7分鐘

           ·

          2020-08-12 03:42

          ↑↑↑關(guān)注后"星標(biāo)"Datawhale

          每日干貨?&?每月組隊(duì)學(xué)習(xí),不錯過

          ?Datawhale干貨?

          作者:李祖賢,深圳大學(xué),Datawhale高校群成員

          本次分享是基于scikit-learn工具包的基本分類方法,包括常見的Logisitic Regression、支持向量機(jī)、決策樹、隨機(jī)森林以及K近鄰方法KNN。本文在基于讀者已經(jīng)基本了解這些基本算法的原理以及推導(dǎo)的基礎(chǔ)上,使用sklearn工具包進(jìn)行算法實(shí)踐,如果大家沒有掌握基本算法原理,文中也會給出一些優(yōu)秀的鏈接方便大家學(xué)習(xí)。如果大家對基本分類算法的基本原理有需求,可以在評論區(qū)寫下自己的需求,我們會根據(jù)大家的意見推出相應(yīng)的分享。

          機(jī)器學(xué)習(xí)算法主要步驟有:

          • 選擇特征并且收集并訓(xùn)練樣本
          • 選擇度量性能的指標(biāo)
          • 選擇分類器并優(yōu)化算法
          • 評估模型性能
          • 調(diào)整算法

          本次分享主要把目光聚集在"選擇分類器并優(yōu)化算法",我們將用學(xué)術(shù)界和工業(yè)界常用的機(jī)器學(xué)習(xí)庫sklearn,對算法進(jìn)行實(shí)踐。

          本文內(nèi)容:

          • 數(shù)據(jù)準(zhǔn)備
          • 邏輯回歸
          • 支持向量機(jī)
          • 決策樹
          • 隨機(jī)森林
          • KNN

          1. 數(shù)據(jù)準(zhǔn)備

          我們使用鳶尾花數(shù)據(jù)集,進(jìn)行分析考核可視化

          # 引入數(shù)據(jù)from sklearn import datasetsimport numpy as np
          iris = datasets.load_iris()X = iris.data[:,[2,3]]y = iris.targetprint("Class labels:",np.unique(y)) #打印分類類別的種類
          Class labels: [0 1 2]

          切分訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)

          # 切分訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)from sklearn.model_selection import train_test_split## 30%測試數(shù)據(jù),70%訓(xùn)練數(shù)據(jù),stratify=y表示訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)具有相同的類別比例X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=1,stratify=y)

          數(shù)據(jù)標(biāo)準(zhǔn)化

          from sklearn.preprocessing import StandardScaler
          sc = StandardScaler()## 估算訓(xùn)練數(shù)據(jù)中的mu和sigmasc.fit(X_train)## 使用訓(xùn)練數(shù)據(jù)中的mu和sigma對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化X_train_std = sc.transform(X_train)X_test_std = sc.transform(X_test)

          定制可視化函數(shù):畫出決策邊界圖(只有在2個特征才能畫出來)

          ## 畫出決策邊界圖(只有在2個特征才能畫出來)import matplotlib.pyplot as plt%matplotlib inlinefrom matplotlib.colors import ListedColormap
          def plot_decision_region(X,y,classifier,resolution=0.02): markers = ('s','x','o','^','v') colors = ('red','blue','lightgreen','gray','cyan') cmap = ListedColormap(colors[:len(np.unique(y))])
          # plot the decision surface x1_min,x1_max = X[:,0].min()-1,X[:,0].max()+1 x2_min,x2_max = X[:,1].min()-1,X[:,1].max()+1 xx1,xx2 = np.meshgrid(np.arange(x1_min,x1_max,resolution), np.arange(x2_min,x2_max,resolution)) Z = classifier.predict(np.array([xx1.ravel(),xx2.ravel()]).T) Z = Z.reshape(xx1.shape) plt.contourf(xx1,xx2,Z,alpha=0.3,cmap=cmap) plt.xlim(xx1.min(),xx1.max()) plt.ylim(xx2.min(),xx2.max())
          # plot class samples for idx,cl in enumerate(np.unique(y)): plt.scatter(x=X[y==cl,0], y = X[y==cl,1], alpha=0.8, c=colors[idx], marker = markers[idx], label=cl, edgecolors='black')


          2. 基于邏輯回歸的分類概率建模

          2.1 原理介紹

          可參考閱讀:一文詳盡系列之邏輯回歸

          2.2 參考文檔詳細(xì)解釋

          class sklearn.linear_model.LogisticRegression(penalty='l2', *, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='lbfgs', max_iter=100, multi_class='auto', verbose=0, warm_start=False, n_jobs=None, l1_ratio=None)

          2.2.1可選參數(shù)

          • penalty:正則化方式,可選擇‘l1’, ‘l2’, ‘elasticnet’, ‘none’,默認(rèn)'l2'

          • dual:是否選擇對偶,當(dāng)n_samples> n_features時,首選dual = False

          • tol:算法停止的誤差條件,默認(rèn)是0.0001

          • C:正則強(qiáng)度的倒數(shù);必須為正浮點(diǎn)數(shù),較小的值指定更強(qiáng)的正則化,默認(rèn)為1.0

          • fit_intercept:是否應(yīng)將常量(也稱為偏差或截距)添加到?jīng)Q策函數(shù)。默認(rèn)是True。

          • intercept_scaling:不常用

          • class_weight:對類別進(jìn)行加權(quán),可以使用字典形式加權(quán),輸入‘balanced’代表權(quán)重為類別頻率,默認(rèn)是"None"。

          • random_state:選擇隨機(jī)種子,打亂樣本時候指定。

          • solver:指定優(yōu)化器類型,可選‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’

            具體的優(yōu)化方法參考:機(jī)器學(xué)習(xí)中的優(yōu)化算法!

          • max_iter:算法收斂的最大迭代次數(shù),默認(rèn)100。

          • multi_class:不常用。

          • verbose:對于liblinear和lbfgs,求解器將verbose設(shè)置為任何正數(shù)以表示詳細(xì)程度。

          • warm_start:不常用。

          • n_jobs:使用內(nèi)核數(shù)。

          • l1_ratio:彈性網(wǎng)絡(luò)參數(shù),其中0 <= l1_ratio <=1。僅當(dāng)penalty=“ elasticnet”時使用。

          2.2.2 返回標(biāo)簽

          • classes_:返回的類別標(biāo)簽
          • coef_:系數(shù)
          • intercept_:截距項(xiàng)
          • n_iter_:所有類的迭代次數(shù)
          from sklearn.linear_model import LogisticRegression
          lr = LogisticRegression(C=100.0,random_state=1)lr.fit(X_train_std,y_train)print("Class:",lr.classes_)print("Coef:",lr.coef_)print("intercept",lr.intercept_)print("n_iter",lr.n_iter_)

          plot_decision_region(X_train_std,y_train,classifier=lr,resolution=0.02)plt.xlabel('petal length [standardized]')plt.ylabel('petal width [standardized]')plt.legend(loc='upper left')plt.show()

          預(yù)測:
          # 預(yù)測## 預(yù)測前三樣本在各個類別的概率print("前三樣本在各個類別的預(yù)測概率為:\n",lr.predict_proba(X_test_std[:3,:]))print("\n============================")## 獲得前三個樣本的分類標(biāo)簽print("\n前三樣本在各個類別的預(yù)測類別為:\n",lr.predict(X_test_std[:3,:]))print("\n============================")


          我們可以看到邏輯回歸的決策邊界是一個線性邊界,這也就是為什么邏輯回歸作為線性分類模型的原因了。大家不要小瞧線性模型,線性模型在現(xiàn)實(shí)生產(chǎn)中還發(fā)揮的重要作用,在金融、經(jīng)濟(jì)中尤為明顯,因?yàn)榫€性模型的模型復(fù)雜度較小,它的可解釋性很好,能夠給決策者決策提供更加強(qiáng)大的依據(jù),而不是像類似于深度學(xué)習(xí)那些復(fù)雜的網(wǎng)絡(luò)模型一樣是個黑箱子。


          3. 基于支持向量機(jī)的分類模型

          3.1 原理介紹

          可參考閱讀:一文詳盡之支持向量機(jī)算法!

          3.2 參考文檔詳細(xì)解釋

          class sklearn.svm.SVC(*, C=1.0, kernel='rbf', degree=3, gamma='scale', coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape='ovr', break_ties=False, random_state=None)

          3.2.1 可選參數(shù)
          • C:正則化參數(shù)。正則化的強(qiáng)度與C成反比。必須嚴(yán)格為正。懲罰是平方的l2懲罰。(默認(rèn)1.0)
          • kernel:核函數(shù)類型,可選‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’;
          • degree:當(dāng)選擇核函數(shù)為poly多項(xiàng)式時,表示多項(xiàng)式的階數(shù)
          • gamma:可選‘scale’和‘a(chǎn)uto’,表示為“ rbf”,“ poly”和“ Sigmoid”的內(nèi)核系數(shù)。

            ,默認(rèn)是'scale',gamma取值為1 / (n_features * X.var());當(dāng)選‘a(chǎn)uto’參數(shù)時gamma取值為1 / n_features。

          • coef0:當(dāng)核函數(shù)選為“ poly”和“ sigmoid”有意義。

          • shrinking:是否使用縮小的啟發(fā)式方法,默認(rèn)是True。
          • probability:是否啟用概率估計(jì),默認(rèn)是False。必須在調(diào)用fit之前啟用此功能,因?yàn)樵摲椒▋?nèi)部使用5倍交叉驗(yàn)證,因而會減慢該方法的速度,并且predict_proba可能與dict不一致。
          • tol:算法停止的條件,默認(rèn)為0.001。cache_size:指定內(nèi)核緩存的大?。ㄒ訫B為單位),默認(rèn)是200。
          • class_weight:每個類樣本的權(quán)重,可以用字典形式給出,選擇'balanced',權(quán)重為n_samples / (n_classes * np.bincount(y));默認(rèn)是None,表示每個樣本權(quán)重一致。
          • verbose:是否使用詳細(xì)輸出,默認(rèn)是False。
          • max_iter:算法迭代的最大步數(shù),默認(rèn)-1表示無限制
          • decision_function_shape:多分類的形式,1 vs 多(‘ovo’)還是1 vs 1(’ovr’),默認(rèn)’ovr’.
          • break_ties:如果為true,decision_function_shape ='ovr',并且類別數(shù)> 2,則預(yù)測將根據(jù)Decision_function的置信度值打破平局;否則,將返回綁定類中的第一類。請注意,與簡單預(yù)測相比,打破平局的計(jì)算成本較高。
          • random_state:隨機(jī)種子,隨機(jī)打亂樣本。


          3.2.2?可選標(biāo)簽

          • support_:
          • support_vectors_:支持向量
          • n_support_:每個類的支持向量數(shù)量
          • dual_coef_:對偶系數(shù);
          • coef_:原始問題的系數(shù)
          • intercept_:決策函數(shù)中的常數(shù)
          • fit_status_:如果正確擬合,則為0,否則為1(將發(fā)出警告)
          • classes_:類別
          • class_weight_:類別的權(quán)重
          • shape_fit_:訓(xùn)練向量X的數(shù)組尺寸。

          線性支持向量機(jī):

          ## 線性支持向量機(jī)from sklearn.svm import SVCsvm = SVC(kernel='linear',C=1.0,random_state=1)svm.fit(X_train_std,y_train)plot_decision_region(X_train_std,y_train,classifier=svm,resolution=0.02)plt.xlabel('petal length [standardized]')plt.ylabel('petal width [standardized]')plt.legend(loc='upper left')plt.show()

          使用核函數(shù)對非線性分類問題建模(gamma=0.20)

          ## 使用核函數(shù)對非線性分類問題建模(gamma=0.20)svm = SVC(kernel='rbf',random_state=1,gamma=0.20,C=1.0)    ##較小的gamma有較松的決策邊界svm.fit(X_train_std,y_train)plot_decision_region(X_train_std,y_train,classifier=svm,resolution=0.02)plt.xlabel('petal length [standardized]')plt.ylabel('petal width [standardized]')plt.legend(loc='upper left')plt.show()

          使用核函數(shù)對非線性分類問題建模(gamma=100)

          ## 使用核函數(shù)對非線性分類問題建模(gamma=100)svm = SVC(kernel='rbf',random_state=1,gamma=100.0,C=1.0,verbose=1)   svm.fit(X_train_std,y_train)plot_decision_region(X_train_std,y_train,classifier=svm,resolution=0.02)plt.xlabel('petal length [standardized]')plt.ylabel('petal width [standardized]')plt.legend(loc='upper left')plt.show()

          從不同的gamma取值的圖像來看:對于高斯核函數(shù),增大gamma值,將增大訓(xùn)練樣本的影響范圍,導(dǎo)致決策邊界緊縮和波動;較小的gamma值得到的決策邊界相對寬松。雖然較大的gamma值在訓(xùn)練樣本中有很小的訓(xùn)練誤差,但是很可能泛化能力較差,容易出現(xiàn)過擬合。


          4. 構(gòu)建決策樹分類器

          4.1 原理介紹

          可參考閱讀:最常用的決策樹算法!Random Forest、Adaboost、GBDT 算法

          4.2 參考文檔詳細(xì)解釋

          class sklearn.tree.DecisionTreeClassifier(*, criterion='gini', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort='deprecated', ccp_alpha=0.0)

          4.2.1 可選參數(shù)
          • criterion:分裂節(jié)點(diǎn)所用的標(biāo)準(zhǔn),可選“gini”, “entropy”,默認(rèn)“gini”。
          • splitter:用于在每個節(jié)點(diǎn)上選擇拆分的策略??蛇x“best”, “random”,默認(rèn)“best”。
          • max_depth:樹的最大深度。如果為None,則將節(jié)點(diǎn)展開,直到所有葉子都是純凈的(只有一個類),或者直到所有葉子都包含少于min_samples_split個樣本。默認(rèn)是None。
          • min_samples_split:拆分內(nèi)部節(jié)點(diǎn)所需的最少樣本數(shù):如果為int,則將min_samples_split視為最小值。如果為float,則min_samples_split是一個分?jǐn)?shù),而ceil(min_samples_split * n_samples)是每個拆分的最小樣本數(shù)。默認(rèn)是2。
          • min_samples_leaf:在葉節(jié)點(diǎn)處需要的最小樣本數(shù)。僅在任何深度的分割點(diǎn)在左分支和右分支中的每個分支上至少留下min_samples_leaf個訓(xùn)練樣本時,才考慮。這可能具有平滑模型的效果,尤其是在回歸中。如果為int,則將min_samples_leaf視為最小值。如果為float,則min_samples_leaf是分?jǐn)?shù),而ceil(min_samples_leaf * n_samples)是每個節(jié)點(diǎn)的最小樣本數(shù)。默認(rèn)是1。
          • min_weight_fraction_leaf:在所有葉節(jié)點(diǎn)處(所有輸入樣本)的權(quán)重總和中的最小加權(quán)分?jǐn)?shù)。如果未提供sample_weight,則樣本的權(quán)重相等。
          • max_features:尋找最佳分割時要考慮的特征數(shù)量:如果為int,則在每個拆分中考慮max_features個特征。如果為float,則max_features是一個分?jǐn)?shù),并在每次拆分時考慮int(max_features * n_features)個特征。如果為“auto”,則max_features = sqrt(n_features)。如果為“ sqrt”,則max_features = sqrt(n_features)。如果為“ log2”,則max_features = log2(n_features)。如果為None,則max_features = n_features。注意:在找到至少一個有效的節(jié)點(diǎn)樣本分區(qū)之前,分割的搜索不會停止,即使它需要有效檢查多個max_features功能也是如此。
          • random_state:隨機(jī)種子,負(fù)責(zé)控制分裂特征的隨機(jī)性,為整數(shù)。默認(rèn)是None。
          • max_leaf_nodes:最大葉子節(jié)點(diǎn)數(shù),整數(shù),默認(rèn)為None
          • min_impurity_decrease:如果分裂指標(biāo)的減少量大于該值,則進(jìn)行分裂。
          • min_impurity_split:決策樹生長的最小純凈度。默認(rèn)是0。自版本0.19起不推薦使用:不推薦使用min_impurity_split,而建議使用0.19中的min_impurity_decrease。min_impurity_split的默認(rèn)值在0.23中已從1e-7更改為0,并將在0.25中刪除。
          • class_weight:每個類的權(quán)重,可以用字典的形式傳入{class_label: weight}。如果選擇了“balanced”,則輸入的權(quán)重為n_samples / (n_classes * np.bincount(y))。
          • presort:此參數(shù)已棄用,并將在v0.24中刪除。
          • ccp_alpha:將選擇成本復(fù)雜度最大且小于ccp_alpha的子樹。默認(rèn)情況下,不執(zhí)行修剪。

          4.2.2?可選標(biāo)簽

          • classes_:類標(biāo)簽(單輸出問題)或類標(biāo)簽數(shù)組的列表(多輸出問題)。
          • feature_importances_:特征重要度。
          • max_features_:max_features的推斷值。
          • n_classes_:類數(shù)(用于單輸出問題),或包含每個輸出的類數(shù)的列表(用于多輸出問題)。
          • n_features_:執(zhí)行擬合時的特征數(shù)量。
          • n_outputs_:執(zhí)行擬合時的輸出數(shù)量。
          • tree_:

          決策樹分類器:

          ## 決策樹分類器from sklearn.tree import DecisionTreeClassifiertree = DecisionTreeClassifier(criterion='gini',max_depth=4,random_state=1)tree.fit(X_train_std,y_train)plot_decision_region(X_train_std,y_train,classifier=tree,resolution=0.02)plt.xlabel('petal length [standardized]')plt.ylabel('petal width [standardized]')plt.legend(loc='upper left')plt.show()

          決策樹可視化:

          可視化決策樹需要安裝基本的軟件和python庫:
          1. 從http://www.graphviz.orz免費(fèi)下載程序

          2. pip3 install pydotplus

          3. pip3 install graphviz

          4. pip3 install pyparsing

          ## 決策樹可視化from pydotplus import graph_from_dot_datafrom sklearn.tree import export_graphvizdot_data = export_graphviz(tree,filled=True,class_names=['Setosa','Versicolor','Virginica'],                          feature_names=['petal_length','petal_width'],out_file=None)graph = graph_from_dot_data(dot_data)graph.write_png('/home/leo/文檔/大四下學(xué)期/zhihu/sklearn的基本分類模型詳解/tree.png')

          從樹的邊界來看,決策樹在鳶尾花分類問題上表現(xiàn)不錯,但是sklearn不提供手工決策樹修剪功能。


          5. 通過隨機(jī)森林組合多棵決策樹

          5.1 原理介紹

          可參考閱讀:機(jī)器學(xué)習(xí)必知必會10大算法

          5.2 參考文檔詳細(xì)解釋

          class sklearn.ensemble.RandomForestClassifier(n_estimators=100, *, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None, ccp_alpha=0.0, max_samples=None)

          5.2.1 可選參數(shù)
          • n_estimators:森林中決策樹的數(shù)量。默認(rèn)100
          • criterion:分裂節(jié)點(diǎn)所用的標(biāo)準(zhǔn),可選“gini”, “entropy”,默認(rèn)“gini”。
          • max_depth:樹的最大深度。如果為None,則將節(jié)點(diǎn)展開,直到所有葉子都是純凈的(只有一個類),或者直到所有葉子都包含少于min_samples_split個樣本。默認(rèn)是None。
          • min_samples_split:拆分內(nèi)部節(jié)點(diǎn)所需的最少樣本數(shù):如果為int,則將min_samples_split視為最小值。如果為float,則min_samples_split是一個分?jǐn)?shù),而ceil(min_samples_split * n_samples)是每個拆分的最小樣本數(shù)。默認(rèn)是2。
          • min_samples_leaf:在葉節(jié)點(diǎn)處需要的最小樣本數(shù)。僅在任何深度的分割點(diǎn)在左分支和右分支中的每個分支上至少留下min_samples_leaf個訓(xùn)練樣本時,才考慮。這可能具有平滑模型的效果,尤其是在回歸中。如果為int,則將min_samples_leaf視為最小值。如果為float,則min_samples_leaf是分?jǐn)?shù),而ceil(min_samples_leaf * n_samples)是每個節(jié)點(diǎn)的最小樣本數(shù)。默認(rèn)是1。
          • min_weight_fraction_leaf:在所有葉節(jié)點(diǎn)處(所有輸入樣本)的權(quán)重總和中的最小加權(quán)分?jǐn)?shù)。如果未提供sample_weight,則樣本的權(quán)重相等。
          • max_features:尋找最佳分割時要考慮的特征數(shù)量:如果為int,則在每個拆分中考慮max_features個特征。如果為float,則max_features是一個分?jǐn)?shù),并在每次拆分時考慮int(max_features * n_features)個特征。如果為“auto”,則max_features = sqrt(n_features)。如果為“ sqrt”,則max_features = sqrt(n_features)。如果為“ log2”,則max_features = log2(n_features)。如果為None,則max_features = n_features。注意:在找到至少一個有效的節(jié)點(diǎn)樣本分區(qū)之前,分割的搜索不會停止,即使它需要有效檢查多個max_features功能也是如此。
          • max_leaf_nodes:最大葉子節(jié)點(diǎn)數(shù),整數(shù),默認(rèn)為None
          • min_impurity_decrease:如果分裂指標(biāo)的減少量大于該值,則進(jìn)行分裂。
          • min_impurity_split:決策樹生長的最小純凈度。默認(rèn)是0。自版本0.19起不推薦使用:不推薦使用min_impurity_split,而建議使用0.19中的min_impurity_decrease。min_impurity_split的默認(rèn)值在0.23中已從1e-7更改為0,并將在0.25中刪除。
          • bootstrap:是否進(jìn)行bootstrap操作,bool。默認(rèn)True。
          • oob_score:是否使用袋外樣本來估計(jì)泛化精度。默認(rèn)False。
          • n_jobs:并行計(jì)算數(shù)。默認(rèn)是None。
          • random_state:控制bootstrap的隨機(jī)性以及選擇樣本的隨機(jī)性。
          • verbose:在擬合和預(yù)測時控制詳細(xì)程度。默認(rèn)是0。
          • warm_start:不常用
          • class_weight:每個類的權(quán)重,可以用字典的形式傳入{class_label: weight}。如果選擇了“balanced”,則輸入的權(quán)重為n_samples / (n_classes * np.bincount(y))。
          • ccp_alpha:將選擇成本復(fù)雜度最大且小于ccp_alpha的子樹。默認(rèn)情況下,不執(zhí)行修剪。
          • max_samples:如果bootstrap為True,則從X抽取以訓(xùn)練每個基本分類器的樣本數(shù)。如果為None(默認(rèn)),則抽取X.shape [0]樣本。如果為int,則抽取max_samples樣本。如果為float,則抽取max_samples * X.shape [0]個樣本。因此,max_samples應(yīng)該在(0,1)中。是0.22版中的新功能。

          5.2.2?可選標(biāo)簽

          • base_estimator_:使用的基本分類器
          • estimators_:子分類器的集合。
          • classes_:類標(biāo)簽(單輸出問題)或類標(biāo)簽數(shù)組的列表(多輸出問題)。
          • n_classes_:類數(shù)(用于單輸出問題),或包含每個輸出的類數(shù)的列表(用于多輸出問題)。
          • n_features_:執(zhí)行擬合時的特征數(shù)量。
          • n_outputs_:執(zhí)行擬合時的輸出數(shù)量。
          • oob_score_:使用袋外估計(jì)獲得的訓(xùn)練數(shù)據(jù)集的分?jǐn)?shù)。僅當(dāng)oob_score為True時,此屬性才存在。
          • oob_decision_function_:使用訓(xùn)練集上的實(shí)際估計(jì)值計(jì)算的決策函數(shù)。如果n_estimators小,則有可能在引導(dǎo)過程中從未遺漏任何數(shù)據(jù)點(diǎn)。在這種情況下,oob_decision_function_可能包含NaN。僅當(dāng)oob_score為True時,此屬性才存在。

          使用隨機(jī)森林分類器:

          ## 使用隨機(jī)森林分類器from sklearn.ensemble import RandomForestClassifier
          forest = RandomForestClassifier(criterion='gini',n_estimators=25,random_state=1,n_jobs=2,verbose=1)forest.fit(X_train_std,y_train)plot_decision_region(X_train_std,y_train,classifier=forest,resolution=0.02)plt.xlabel('petal length [standardized]')plt.ylabel('petal width [standardized]')plt.legend(loc='upper left')plt.show()


          6.?K近鄰(KNN)

          6.1 原理介紹

          可參考閱讀:機(jī)器學(xué)習(xí)必知必會10大算法

          6.2 參考文檔詳細(xì)解釋

          class sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, _, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None, *_kwargs)

          6.2.1 可選參數(shù)
          • n_neighbors:尋找的鄰居數(shù),默認(rèn)是5。
          • weights:預(yù)測中使用的權(quán)重函數(shù)??赡艿娜≈担骸畊niform’:統(tǒng)一權(quán)重,即每個鄰域中的所有點(diǎn)均被加權(quán)?!甦istance’:權(quán)重點(diǎn)與其距離的倒數(shù),在這種情況下,查詢點(diǎn)的近鄰比遠(yuǎn)處的近鄰具有更大的影響力。[callable]:用戶定義的函數(shù),該函數(shù)接受距離數(shù)組,并返回包含權(quán)重的相同形狀的數(shù)組。
          • algorithm:用于計(jì)算最近鄰居的算法:“ ball_tree”將使用BallTree,“ kd_tree”將使用KDTree,“brute”將使用暴力搜索?!癮uto”將嘗試根據(jù)傳遞給fit方法的值來決定最合適的算法。注意:在稀疏輸入上進(jìn)行擬合將使用蠻力覆蓋此參數(shù)的設(shè)置。
          • leaf_size:葉大小傳遞給BallTree或KDTree。這會影響構(gòu)造和查詢的速度,以及存儲樹所需的內(nèi)存。最佳值取決于問題的性質(zhì)。默認(rèn)30。
          • p:Minkowski距離的指標(biāo)的功率參數(shù)。當(dāng)p = 1時,等效于使用manhattan_distance(l1)和p=2時使用euclidean_distance(l2)。對于任意p,使用minkowski_distance(l_p)。默認(rèn)是2。
          • metric:樹使用的距離度量。默認(rèn)度量標(biāo)準(zhǔn)為minkowski,p = 2等于標(biāo)準(zhǔn)歐幾里德度量標(biāo)準(zhǔn)。
          • metric_params:度量函數(shù)的其他關(guān)鍵字參數(shù)。
          • n_jobs:并行計(jì)算數(shù)

          6.2.2?可選標(biāo)簽

          • classes_:類別
          • effective_metric_:使用的距離度量。它將與度量參數(shù)相同或與其相同,例如如果metric參數(shù)設(shè)置為“ minkowski”,而p參數(shù)設(shè)置為2,則為“ euclidean”。
          • effective_metric_params_:度量功能的其他關(guān)鍵字參數(shù)。對于大多數(shù)指標(biāo)而言,它與metric_params參數(shù)相同,但是,如果將valid_metric_屬性設(shè)置為“ minkowski”,則也可能包含p參數(shù)值。
          • outputs_2d_:在擬合的時候,當(dāng)y的形狀為(n_samples,)或(n_samples,1)時為False,否則為True。

          使用KNN分類器:

          ## 使用KNN分類器from sklearn.neighbors import KNeighborsClassifier
          knn = KNeighborsClassifier(n_neighbors=2,p=2,metric="minkowski")knn.fit(X_train_std,y_train)plot_decision_region(X_train_std,y_train,classifier=knn,resolution=0.02)plt.xlabel('petal length [standardized]')plt.ylabel('petal width [standardized]')plt.legend(loc='upper left')plt.show()

          值得注意的是:KNN容易過擬合,因?yàn)樵诟呔S空間上,隨著維數(shù)越來越大,特征空間越來越稀疏,大家可以想象在一個球體里面,大部分的信息集中在球面,那KNN需要找最近的點(diǎn)就會十分困難,那么也就無法合適進(jìn)行估計(jì)。

          本文電子版 后臺回復(fù)?sklearn?獲取

          “整理不易,點(diǎn)三連

          瀏覽 61
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产一线二线在线观看 | 在线天堂а√8 | 久久夜色精品国产嚕嚕亚洲AV | 视频一区二区77在线 | 四虎欧美性爱 |