我的随机森林分类算法没有给出我想要的结果
Posted
技术标签:
【中文标题】我的随机森林分类算法没有给出我想要的结果【英文标题】:My Random Forest Classification Algorithm doesn't give the results I want 【发布时间】:2021-08-16 12:52:14 【问题描述】:我制作了一个随机数的 Excel 表(3000 行和 6 列)并将其设置为 B 列 >= 50、C 列为 0 和 E 列为 1 的任何行都得到最终的“y”值为 1。否则,它的值为 0。通过这个 RandomForestClassifier 代码运行它,它不起作用,要么为所有新的测试数据返回 0,要么在预测时甚至不考虑 B 列。我该如何解决这个问题?
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
import pickle
data_crd = pd.read_csv(r'C:\Users\Rada1\.spyder-py3\new_created_data.csv')
#C:\Users\Rada1\.spyder-py3\new_created_data.csv
data_crd.head()
X = data_crd.iloc[:,1:5]
y = data_crd.iloc[:,5]
#print (X)
#print (y)
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, random_state=0)
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
classifier = RandomForestClassifier (n_estimators = 500, random_state = 0)
classifier.fit (X_train, y_train)
y_pred = classifier.predict(X_test)
print (classification_report(y_test,y_pred))
print (confusion_matrix(y_test,y_pred))
print (accuracy_score(y_test,y_pred))
with open ('model_wcd','wb') as f:
pickle.dump(classifier,f)
我得到了 100% 的准确率作为我的结果,这已经感觉不对了。我需要调整什么?
precision recall f1-score support
0 1.00 1.00 1.00 515
1 1.00 1.00 1.00 85
accuracy 1.00 600
macro avg 1.00 1.00 1.00 600
weighted avg 1.00 1.00 1.00 600
[[515 0]
[ 0 85]]
1.0
【问题讨论】:
【参考方案1】:希望如果您使用 stratify =y 它可能会起作用 X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, random_state=0,stratify=y) 并将 MinMaxScaler 用于数值特征并将它们重塑为 (-1,1) x_train_num=num_feature.transform(x_train[column_name].values.reshape(-1,1)) x_test_num=num_feature.transform(x_test[column_name].values.reshape(-1,1))
【讨论】:
以上是关于我的随机森林分类算法没有给出我想要的结果的主要内容,如果未能解决你的问题,请参考以下文章