Sklearn 使用模型预测显示无变量名

UserWarning: X has feature names, but RandomForestClassifier was fitted without feature names
warnings.warn
使用Sklearn建立随机森林模型后,使用建立模型预测另一个数据集,出现以上报错。

#准备数据集
import pandas as pd
import numpy as np
data = pd.read_csv("C:/Users/Administrator/Desktop/meta+ML/MLdata.csv")
data = pd.DataFrame(data, columns=['croptype', 'bio1', 'bio2', 'bio3', 'bio4', 'bio5', 'bio6', 'bio7','suitibility'])
lables = list(data.columns.values)
#print(lables)
x = data[['croptype', 'bio1', 'bio2', 'bio3', 'bio4', 'bio5', 'bio6', 'bio7']]
y = data['suitibility']

#print(x, y)

#建立模型

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
x_train,  x_test, y_train, y_test = train_test_split(x, y, random_state=24)
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
Estimator = RandomForestClassifier()
'''
param_dict = {"n_estimator": [120, 200, 300, 500, 800, 1200], "max_depth": [3, 5, 10]}
Estimator = GridSearchCV(Estimator, param_grid=param_dict, cv=3)
Estimator.fit(x_train, y_train)
y_predict = Estimator.predict(x_test)
score = Estimator.score(x_test, y_test)
print('Score: ', score)

# 导入并建立需要预测的数据集
predict = pd.read_csv("C:/Users/Administrator/Desktop/meta+ML/Predict.csv")
print(predict)
X = pd.DataFrame(predict, columns=['croptype', 'bio1', 'bio2', 'bio3', 'bio4', 'bio5', 'bio6', 'bio7'])
print(X)
X = X[['croptype', 'bio1', 'bio2', 'bio3', 'bio4', 'bio5', 'bio6', 'bio7']]
X = pd.DataFrame(X)
print(X)

# 运用模型预测
predict_result = Estimator.predict(X)
print(predict_result)

# 预测结果
X_result = pd.DataFrame(predict_result)
print(X_result)
y.to_csv('result.csv')



用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
运行结果及详细报错内容

Score:  0.6923076923076923
       croptype       bio1      bio2  ...   totc  totn  watercapab
0             1  10.835200   7.35701  ...  11.72  1.33          14
1             1  10.594600   7.27485  ...  11.72  1.33          14
2             1  10.820800   7.65421  ...  11.72  1.33          14
3             1  10.781500   7.59592  ...  11.72  1.33          14
4             1  10.527900   7.23958  ...  11.72  1.33          14
...         ...        ...       ...  ...    ...   ...         ...

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\base.py:443: UserWarning: X has feature names, but RandomForestClassifier was fitted without feature names
  warnings.warn(
[3 3 3 ... 3 3 3]

Process finished with exit code 0

可以看出,预测结果全部为3。尝试预测训练集,得到的结果也全是3类,报错内容一样。

这通常是由于你在建立随机森林模型时,没有指定特征名称。
在使用 Sklearn 建立随机森林模型时,可以使用 RandomForestClassifier 类的 fit 方法来训练模型。这个方法需要输入两个参数:X 和 y。其中,X 是训练数据的特征矩阵,y 是训练数据的标签。
如果你在建立随机森林模型时没有指定特征名称,那么 Sklearn 会自动生成特征名称,并使用默认的特征名称来训练模型。
当你使用建立的模型对另一个数据集进行预测时,如果你的数据集也有特征名称,但是模型没有使用特征名称训练,那么 Sklearn 就会弹出上述警告。