【发布时间】:2020-07-20 13:59:24
【问题描述】:
我已经使用随机森林分类器来构建模型 - 模型运行良好,我能够在训练和测试中输出分数以及概率值。
挑战是:
我使用 29 个变量作为具有 1 个目标的特征
当我为 X_Test 评分时,它运行良好
- 当我引入一个包含 29 个变量和我的唯一 ID /主键的新数据集时 - 模型错误提示它正在寻找 29 个变量
如何保留我的 ID 并获得新文件的预测?
到目前为止我尝试了什么 -
data = pd.read_csv('learn2.csv')
y=data['Target'] # Labels
X=data[[
'xsixn', 'xssocixtesDegreeOnggy', 'xverxgeeeouseeeoggdIncome', 'BxceeeggorsDegreeOnggy', 'Bggxckorxfricxnxmericxn',
'Ceeiggdrenxteeome', 'Coggggege', 'Eggementxry', 'GrxduxteDegree', 'eeigeeSceeoogg', 'eeigeeSceeooggGrxduxte', 'eeouseeeoggdsEst',
'MedixneeouseeeoggdIncome', 'NoVeeeicgges', 'Oteeerxsixn', 'OteeersRxces', 'OwnerOccupiedPercent', 'PercentBggueCoggggxrWorkers',
'PercentWeeiteCoggggxr', 'PopuggxtionEst', 'PopuggxtionPereeouseeeoggd', 'RenterOccupiedPercent', 'RetiredOrDisxbggePersons',
'TotxggDxytimePopuggxtion', 'TotxggStudentPopuggxtion', 'Unempggoyed', 'VxcxnteeousingPercent', 'Weeite', 'WorkpggxceEstxbggiseements'
]]
# Import train_test_split function
from sklearn.model_selection import train_test_split
# Split dataset into training set and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) # 80% training
#Import Random Forest Model
from sklearn.ensemble import RandomForestClassifier
#Create a Gaussian Classifier
clf=RandomForestClassifier(n_estimators=100)
#Train the model using the training sets y_pred=clf.predict(X_test)
clf.fit(X_train,y_train)
y_pred=clf.predict(X_test)
预测新文件:
data1=pd.read_csv('score.csv')
y_pred2=clf.predict(data2)
ValueError: Number of features of the model must match the input. Model n_features is 29 and input n_features is 30
【问题讨论】:
-
我们无法真正重现这一点。例如,您可以打印
data_1和X(作为df)的列名吗? -
所有浮动,我的 ID 是对象
-
形状一样吗?该错误似乎表明 X_train 和 X_test 的形状不同(列数不同)
-
是的,我要运行的文件将具有唯一的 ID 作为额外的列,我不想错过。
标签: python pandas machine-learning random-forest