python决策树分类 导入数据集_python+sklearn实现决策树(分类树)
整理今天的代碼……
采用的是150條鳶尾花的數據集fishiris.csv
# 讀入數據,把Name列取出來作為標簽(groundtruth)
import pandas as pd
data = pd.read_csv(‘fishiris.csv‘)
print(data.head(5))
X = data.iloc[:, data.columns != ‘Name‘]
Y = data[‘Name‘]
df.iloc[rows, columns]取出符合條件的列。查看數據讀取是否正確(關于pandas使用最熟練的一條……orz),如果csv文件或者其他數據沒有列名需要加上names=[]?
SepalLength SepalWidth PetalLength PetalWidth Name
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa
確認數據無誤后就可以分出驗證集和測試集,挺方便的!查看一下返回數據的格式和數據集好像是相同的:type(Xtrain):
# 分割驗證集和訓練集
from sklearn.model_selection import train_test_split
Xtrain, Xtest, Ytrain, Ytest = train_test_split(X,Y,test_size=0.2)
數據準備好就可以建模了。注意,因為這個數據集里沒有空缺值所以沒管,但是sklearn里這個模塊好像是不能處理空缺的?要手動寫個函數填進去。
# 導入分類樹的模塊
from sklearn.tree import DecisionTreeClassifier
# 需要整理一下序號,也就是更新df.index,前面的可以看到挺亂的,因為是隨機取的
for i in [Xtrain,Xtest,Ytrain,Ytest]: # 這里的意思是i依次為Xtrain,Xtest……并修改它們的index值
print(i,‘before‘)
i.index = range(i.shape[0])
print(i,‘after changed‘)
clf = DecisionTreeClassifier(random_state=3) # 初始化
clf = clf.fit(Xtrain,Ytrain) # 擬合
score_ = clf.score(Xtest, Ytest) # 驗證集查看得分,這個得分好像就是分類的準確率
# 可以輸入數據送到訓練好的模型里,輸出預測的類
y_pred = clf.predict(Xtest)
看看:
# 之前的index
SepalLength SepalWidth PetalLength PetalWidth
19 5.1 3.8 1.5 0.3
67 5.8 2.7 4.1 1.0
6 4.6 3.4 1.4 0.3
100 6.3 3.3 6.0 2.5
39 5.1 3.4 1.5 0.2
.. ... ... ... ...
106 4.9 2.5 4.5 1.7
25 5.0 3.0 1.6 0.2
138 6.0 3.0 4.8 1.8
84 5.4 3.0 4.5 1.5
94 5.6 2.7 4.2 1.3
[120 rows x 4 columns] before
# 之后的index
SepalLength SepalWidth PetalLength PetalWidth
0 5.1 3.8 1.5 0.3
1 5.8 2.7 4.1 1.0
2 4.6 3.4 1.4 0.3
3 6.3 3.3 6.0 2.5
4 5.1 3.4 1.5 0.2
.. ... ... ... ...
115 4.9 2.5 4.5 1.7
116 5.0 3.0 1.6 0.2
117 6.0 3.0 4.8 1.8
118 5.4 3.0 4.5 1.5
119 5.6 2.7 4.2 1.3
[120 rows x 4 columns] after changed
輸出驗證集的預測結果以及和真值的對比:
[‘virginica‘ ‘setosa‘ ‘versicolor‘ ‘setosa‘ ‘setosa‘ ‘versicolor‘ ‘setosa‘
‘setosa‘ ‘setosa‘ ‘versicolor‘ ‘virginica‘ ‘versicolor‘ ‘setosa‘
‘virginica‘ ‘setosa‘ ‘virginica‘ ‘versicolor‘ ‘versicolor‘ ‘virginica‘
‘virginica‘ ‘versicolor‘ ‘versicolor‘ ‘versicolor‘ ‘virginica‘
‘virginica‘ ‘versicolor‘ ‘setosa‘ ‘setosa‘ ‘setosa‘ ‘virginica‘]
0 True
1 True
2 True
3 True
4 True
5 True
6 True
7 True
8 True
9 True
10 True
11 True
12 True
13 True
14 True
15 True
16 True
17 True
18 True
19 True
20 True
21 True
22 True
23 True
24 True
25 True
26 True
27 True
28 True
29 True
Name: Name, dtype: bool
更高級的建模方法:利用GridSearchCV這個模塊!
# 預測結果不準確,可以使用網格法優化,這里設定了模型訓練的多個參數,利用sklearn里的模塊可以自己測試并選擇結果最好的一個模型?我還不是很懂
parameters = {‘splitter‘:(‘best‘,‘random‘)
,‘criterion‘:("gini","entropy")
,"max_depth":[*range(1,10)]
,‘min_samples_leaf‘:[*range(1,50,5)]
,‘min_impurity_decrease‘:[*np.linspace(0,0.5,20)]
}
from sklearn.model_selection import GridSearchCV
GS = GridSearchCV(clf, parameters, cv=10)
GS.fit(Xtrain,Ytrain)
print(GS.best_params_)
print(GS.best_score_)
{‘criterion‘: ‘gini‘, ‘max_depth‘: 5, ‘min_impurity_decrease‘: 0.0, ‘min_samples_leaf‘: 1, ‘splitter‘: ‘random‘}
0.9703296703296704
score_ = clf.score(Xtest, Ytest)
print(score_,‘score‘) # 1.0 score
明天想把圖畫出來嗷嗷,然后再試試回歸樹!
原文地址:https://www.cnblogs.com/sweetsmartrange/p/13352474.html
總結
以上是生活随笔為你收集整理的python决策树分类 导入数据集_python+sklearn实现决策树(分类树)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 斜杠的意思是或还是和_开启你的斜杠人生
- 下一篇: python求组合数c_【Python】