我正在嘗試訓練一個隨機森林來對鳶尾花資料集中的一組花的種類進行分類。然而,驗證對我來說有點奇怪,因為看起來結果是完美的,這是我沒想到的。
由于我想執行二元分類,我從訓練資料集中排除了屬于類別“2”的花,因此我只有 0/1 朵花。
我的代碼有問題嗎?
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
iris = load_iris()
X = iris.data
y = iris.target
X = X[y != 2]
y = y[y != 2]
forest = RandomForestClassifier(n_estimators=100, max_depth=2, max_samples=0.7, max_features=2)
print(cross_val_score(forest, X, y, scoring='accuracy'))
輸出:
array([1., 1., 1., 1., 1.])
uj5u.com熱心網友回復:
代碼很好,您擁有的資料集很容易分離,您可以將其可視化:
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1,2,figsize=(12,6))
ax[0].scatter(X[:,0],X[:,1],c = y)
ax[0].set_xlabel(iris.feature_names[0])
ax[0].set_xlabel(iris.feature_names[1])
ax[1].scatter(X[:,2],X[:,3],c = y)
ax[1].set_xlabel(iris.feature_names[2])
ax[1].set_xlabel(iris.feature_names[3])

右側的圖顯示了您的第 3 列和第 4 列(花瓣寬度和長度),不同的顏色代表不同的標簽。因此,如果您對 80% 的資料進行訓練,則可以根據在第 3 列和第 4 列上設定正確的拆分,輕松正確地預測其余 20% 的驗證資料。
您還可以通過其中 1 個折疊的重要性得分看到這一點:
from sklearn.model_selection import train_test_split
import pandas as pd
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
forest.fit(X_train,y_train)
importances = pd.Series(forest.feature_importances_,index=iris.feature_names)
importances = importances.sort_values()
importances.plot.barh()

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/349343.html
標籤:Python 机器学习 scikit 学习 分类 随机森林
上一篇:model.predict()==ValueError:檢查輸入時出錯:預期flatten_input有3個維度,但得到了形狀為(1,2)的陣列
