plt.figure(figsize=(10,8))sns.countplot(wine_df['quality']);wine_df['quality'] = wine_df['quality'].replace(8,7)wine_df['quality'] = wine_df['quality'].replace(3,5)wine_df['quality'] = wine_df['quality'].replace(4,5)wine_df['quality'].value_counts(normalize=True)將數(shù)據(jù)分為訓(xùn)練集和測(cè)試集,以檢查模型的準(zhǔn)確性,并查找是否存在過擬合或欠擬合 。
# 將數(shù)據(jù)分解為訓(xùn)練集和測(cè)試集from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test =train_test_split(wine_df.drop('quality',axis=1), wine_df['quality'], test_size=.3, random_state=22)X_train.shape,X_test.shape利用基尼準(zhǔn)則建立了決策樹模型 。請(qǐng)注意,為了簡(jiǎn)單起見,我們將樹剪枝到最大深度3 。這將有助于我們將樹可視化,并將其與我們?cè)诔跏疾糠种杏懻摰母拍盥?lián)系起來 。
clf_pruned = DecisionTreeClassifier(criterion = "gini", random_state = 100,max_depth=3, min_samples_leaf=5)clf_pruned.fit(X_train, y_train)請(qǐng)注意,可以調(diào)整以下參數(shù)以改進(jìn)模型輸出(Scikit Learn,2019) 。
criterion — 使用的度量,例如基尼不純度class_weight — None,代表所有類權(quán)重為1max_depth — 3; 剪枝 。當(dāng)“None”表示節(jié)點(diǎn)將展開,直到所有葉子都是同構(gòu)的max_features — None; 在決定節(jié)點(diǎn)的分割時(shí),要考慮所有的特征或自變量max_leaf_nodes — None;min_impurity_decrease — 0.0; 只有當(dāng)分割確保不純度的減少大于或等于零時(shí),節(jié)點(diǎn)才被分割min_impurity_split — None;min_samples_leaf — 1;一個(gè)葉子存在所需的最小樣本數(shù)min_samples_split — 2; 如果min_samples_leaf =1,則表示右節(jié)點(diǎn)和左節(jié)點(diǎn)應(yīng)該各有一個(gè)樣本,即父節(jié)點(diǎn)或根節(jié)點(diǎn)應(yīng)該至少有兩個(gè)樣本splitter — ‘best’; 用于在每個(gè)節(jié)點(diǎn)選擇分割的策略 。最好確保在決定分割時(shí)考慮到所有的特征from sklearn.tree import export_graphvizfrom sklearn.externals.six import StringIOfrom IPython.display import Imageimport pydotplusimport graphvizxvar = wine_df.drop('quality', axis=1)feature_cols = xvar.columnsdot_data = https://www.520longzhigu.com/diannao/StringIO()export_graphviz(clf_pruned, out_file=dot_data,filled=True, rounded=True,special_characters=True,feature_names = feature_cols,class_names=['0','1','2'])from pydot import graph_from_dot_data(graph, ) = graph_from_dot_data(dot_data.getvalue())Image(graph.create_png())preds_pruned = clf_pruned.predict(X_test)preds_pruned_train = clf_pruned.predict(X_train)print(accuracy_score(y_test,preds_pruned))print(accuracy_score(y_train,preds_pruned_train))模型對(duì)訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)的準(zhǔn)確度得分分別為0.60和0.62 。
特征重要性是指一類將分?jǐn)?shù)分配給預(yù)測(cè)模型的輸入特征的技術(shù),該技術(shù)指示在進(jìn)行預(yù)測(cè)時(shí)每個(gè)特征的相對(duì)重要性 。
## 計(jì)算特征重要性feat_importance = clf_pruned.tree_.compute_feature_importances(normalize=False)feat_imp_dict = dict(zip(feature_cols, clf_pruned.feature_importances_))feat_imp = pd.DataFrame.from_dict(feat_imp_dict, orient='index')feat_imp.rename(columns = {0:'FeatureImportance'}, inplace = True)feat_imp.sort_values(by=['FeatureImportance'], ascending=False).head()DecisionTreeClassifier()提供諸如min_samples_leaf和max_depth等參數(shù),以防止樹過度擬合 。
可以看成是如下場(chǎng)景,在這個(gè)場(chǎng)景中,我們明確定義樹的深度和最大葉子數(shù) 。然而,最大的挑戰(zhàn)是如何確定一棵樹應(yīng)該包含的最佳深度和葉子 。
在上面的例子中,我們使用max_depth=3,min_samples_leaf=5 。這些數(shù)字只是用來觀察樹的行為的示例圖 。但是,如果在現(xiàn)實(shí)中,我們被要求研究這個(gè)模型并為模型參數(shù)找到一個(gè)最佳值,這是一個(gè)挑戰(zhàn),但并非不可能(決策樹模型可以使用GridSearchCV算法進(jìn)行微調(diào)) 。
另一種方法是使用成本復(fù)雜性剪枝(CCP) 。
成本復(fù)雜性剪枝為控制樹的大小提供了另一種選擇 。在DecisionTreeClassifier中,這種剪枝技術(shù)是由代價(jià)復(fù)雜性參數(shù)ccp_alpha來參數(shù)化的 。ccp_alpha值越大,剪枝的節(jié)點(diǎn)數(shù)就越多 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- 最好的免費(fèi)dvd刻錄軟件 光盤刻錄軟件有哪些好用
- 128擴(kuò)容卡一鍵還原的技巧 擴(kuò)容盤修復(fù)工具
- 簡(jiǎn)單python爬蟲完整代碼 python爬蟲案例講解
- 三款適合學(xué)生黨的中端機(jī)推薦 學(xué)生黨備用機(jī)推薦
- 中端機(jī)有旗艦的拍照效果 中端拍照手機(jī)
- 盤點(diǎn)性價(jià)比超高的中端手機(jī) 性價(jià)比比較高的中端手機(jī)
- 4800萬像素 4800萬像素相機(jī)
- 三觀正常的標(biāo)準(zhǔn) 什么是三觀不合
- 納米防水涂料的特性
- 內(nèi)墻涂料的種類
