<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>

          機器學習之sklearn基礎教程!

          共 3139字,需瀏覽 7分鐘

           ·

          2020-09-06 10:51

          ?Datawhale干貨?

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

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

          機器學習算法主要步驟有:

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

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

          本文內容:

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

          1. 數(shù)據(jù)準備

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

          # 引入數(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]

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

          # 切分訓練數(shù)據(jù)和測試數(shù)據(jù)from sklearn.model_selection import train_test_split## 30%測試數(shù)據(jù),70%訓練數(shù)據(jù),stratify=y表示訓練數(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ù)標準化

          from sklearn.preprocessing import StandardScaler
          sc = StandardScaler()## 估算訓練數(shù)據(jù)中的mu和sigmasc.fit(X_train)## 使用訓練數(shù)據(jù)中的mu和sigma對數(shù)據(jù)進行標準化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 參考文檔詳細解釋

          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’,默認'l2'

          • dual:是否選擇對偶,當n_samples> n_features時,首選dual = False

          • tol:算法停止的誤差條件,默認是0.0001

          • C:正則強度的倒數(shù);必須為正浮點數(shù),較小的值指定更強的正則化,默認為1.0

          • fit_intercept:是否應將常量(也稱為偏差或截距)添加到決策函數(shù)。默認是True。

          • intercept_scaling:不常用

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

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

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

            具體的優(yōu)化方法參考:機器學習中的優(yōu)化算法!

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

          • multi_class:不常用。

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

          • warm_start:不常用。

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

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

          2.2.2 返回標簽

          • classes_:返回的類別標簽
          • coef_:系數(shù)
          • intercept_:截距項
          • 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()

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


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


          3. 基于支持向量機的分類模型

          3.1 原理介紹

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

          3.2 參考文檔詳細解釋

          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ù)。正則化的強度與C成反比。必須嚴格為正。懲罰是平方的l2懲罰。(默認1.0)
          • kernel:核函數(shù)類型,可選‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’;
          • degree:當選擇核函數(shù)為poly多項式時,表示多項式的階數(shù)
          • gamma:可選‘scale’和‘auto’,表示為“ rbf”,“ poly”和“ Sigmoid”的內核系數(shù)。

            ,默認是'scale',gamma取值為1 / (n_features * X.var());當選‘auto’參數(shù)時gamma取值為1 / n_features。

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

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


          3.2.2?可選標簽

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

          線性支持向量機:

          ## 線性支持向量機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值,將增大訓練樣本的影響范圍,導致決策邊界緊縮和波動;較小的gamma值得到的決策邊界相對寬松。雖然較大的gamma值在訓練樣本中有很小的訓練誤差,但是很可能泛化能力較差,容易出現(xiàn)過擬合。


          4. 構建決策樹分類器

          4.1 原理介紹

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

          4.2 參考文檔詳細解釋

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

          4.2.2?可選標簽

          • classes_:類標簽(單輸出問題)或類標簽數(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免費下載程序

          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/文檔/大四下學期/zhihu/sklearn的基本分類模型詳解/tree.png')

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


          5. 通過隨機森林組合多棵決策樹

          5.1 原理介紹

          可參考閱讀:機器學習必知必會10大算法

          5.2 參考文檔詳細解釋

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

          5.2.2?可選標簽

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

          使用隨機森林分類器:

          ## 使用隨機森林分類器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 原理介紹

          可參考閱讀:機器學習必知必會10大算法

          6.2 參考文檔詳細解釋

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

          6.2.2?可選標簽

          • classes_:類別
          • effective_metric_:使用的距離度量。它將與度量參數(shù)相同或與其相同,例如如果metric參數(shù)設置為“ minkowski”,而p參數(shù)設置為2,則為“ euclidean”。
          • effective_metric_params_:度量功能的其他關鍵字參數(shù)。對于大多數(shù)指標而言,它與metric_params參數(shù)相同,但是,如果將valid_metric_屬性設置為“ minkowski”,則也可能包含p參數(shù)值。
          • outputs_2d_:在擬合的時候,當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容易過擬合,因為在高維空間上,隨著維數(shù)越來越大,特征空間越來越稀疏,大家可以想象在一個球體里面,大部分的信息集中在球面,那KNN需要找最近的點就會十分困難,那么也就無法合適進行估計。




          相關閱讀:



          瀏覽 42
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  一级a一级a爰片免费啪啪女女 | 在线观看黄黄片 | 国产精品999三级片 | 91超碰在线观看 | 婷婷五月丁香激情免费视频 |