5分鐘 NLP :Hugging Face 主要類和函式介紹 🤗
阿新 • • 發佈:2022-03-04
演算法原理
在已知條件中,選取一個條件作為樹根,然後再看是否還需要其他判斷條件,如果需要的話,繼續構建一個分支來判斷第二個條件,以此類推。最終形成的這棵樹上,所有葉子節點都是要輸出的類別資訊,所有非葉子節點都是特徵資訊
決策樹演算法使用資訊增益的方法來衡量一個特徵和特徵之間的重要性
理想狀態下,決策樹上的每一個葉子節點都是一個純粹的分類;實際上,決策樹實現的時候採用貪心演算法,來尋找一個最近的最優解
優點
1.非常直觀,可解釋極強
2.預測速度比較快
3.既可以處理離散值,也可以處理連續值,還可以處理缺失值
缺點
1.容易過擬合
2.需要處理樣本不均衡的問題
3.樣本的變化會引發樹結構的鉅變
由於容易過擬合,所以會剪枝,一般用後剪枝
預剪枝:在決策樹構建之初就設定一個閾值,當分裂節點的熵閾值小於設定值的時候就不再進行分裂
後剪枝:在決策樹已經構建完成以後,再根據設定的條件來判斷是否要合併一些中間節點,使用葉子節點來代替
# -*- coding: utf-8 -*- """ Created on Tue Mar 8 15:19:05 2022 @author: 鄒凡 """ #決策樹 from sklearn import datasets #sklearn的資料集 from sklearn.tree import DecisionTreeClassifier #引入決策樹演算法包import numpy as np #矩形運算庫numpy np.random.seed(0) #設定隨機種子,不設定的話預設是按系統時間作為引數,設定後可以保證我們每次產生的隨機數是一樣的 iris = datasets.load_iris() #獲取鳶尾花資料集 iris_x = iris.data #資料部分 iris_y = iris.target #類別部分 #從150條資料中選取140條作為訓練集,10條作為測試集。permutation接收一個數作為引數(這裡為資料集長度150), #產生一個0-149亂序一維陣列 indices = np.random.permutation(len(iris_x)) iris_x_train= iris_x[indices[:-10]] #訓練集資料 iris_y_train = iris_y[indices[:-10]] #訓練集標籤 iris_x_test = iris_x[indices[-10:]] #測試集資料 iris_y_test = iris_y[indices[-10:]] #測試集資料 #設定樹的最大深度為4 clf = DecisionTreeClassifier(max_depth=4) #呼叫該物件的訓練方法,主要接收兩個引數:訓練資料集及其類別標籤 clf.fit(iris_x_train,iris_y_train) #引入圖畫相關的包 from IPython.display import Image from sklearn import tree #dot是一個程式化生成流程圖的簡單語言 import pydotplus dot_data = tree.export_graphviz(clf,out_file=None, feature_names=iris.feature_names, class_names=iris.target_names, filled=True,rounded=True, special_characters=True) graph = pydotplus.graph_from_dot_data(dot_data) Image(graph.create_png())
#對測試結果進行預測 iris_y_predict = clf.predict(iris_x_test) #呼叫該物件的打分方法,計算出準確率 score = clf.score(iris_x_test,iris_y_test,sample_weight=None) #輸出測試結果 print('iris_y_predict=') print(iris_y_predict) #輸出原始測試資料集的正確標籤,以方便對比 print('iris_y_test=') print(iris_y_test) #輸出準確率計算結果 print('Accuracy:',score)