gpt4 book ai didi

python - ValueError:X 每个样本有 29 个特征;期待 84

转载 作者:行者123 更新时间:2023-12-01 07:26:09 26 4
gpt4 key购买 nike

我正在编写一个使用 Lending Club API 的脚本来预测贷款是“全额支付”还是“冲销”。为此,我使用 scikit-learn 来构建模型并使用 joblib 进行持久化。由于持久模型中的列数与新原始数据中的列数之间存在差异,我遇到了 ValueError 。 ValueError 是由于为分类变量创建虚拟变量而引起的。模型中使用的列数为 84,在此示例中,使用新数据的列数为 29。

创建虚拟变量时,新数据的列数需要为 84,但我不确定如何继续,因为只有分类变量“homeOwnership”、“addrState”和“目的”的所有可能值的子集' 从 API 获取新数据时出现。

这是我目前正在测试的代码,从分类变量转换为虚拟变量的点开始,到模型实现为止。

#......continued

df['mthsSinceLastDelinq'].notnull().astype('int')
df['mthsSinceLastRecord'].notnull().astype('int')
df['grade_num'] = df['grade'].map({'A':0,'B':1,'C':2,'D':3})
df['emp_length_num'] = df['empLength']
df = pd.get_dummies(df,columns=['homeOwnership','addrState','purpose'])
# df = pd.get_dummies(df,columns=['home_ownership','addr_state','verification_status','purpose'])

# step 3.5 transform data before making predictions

df.drop(['id','grade','empLength','isIncV'],axis=1,inplace=True)
dfbcd = df[df['grade_num'] != 0]
scaler = StandardScaler()
x_scbcd = scaler.fit_transform(dfbcd)

# step 4 predicting

lrbcd_test = load('lrbcd_test.joblib')
ypredbcdfinal = lrbcd_test.predict(x_scbcd)

这是错误消息

ValueError                                Traceback (most recent call last)
<ipython-input-239-c99611b2e48a> in <module>
11 # change name of model and file name
12 lrbcd_test = load('lrbcd_test.joblib')
---> 13 ypredbcdfinal = lrbcd_test.predict(x_scbcd)
14
15 #add model

~\Anaconda3\lib\site-packages\sklearn\linear_model\base.py in predict(self, X)
287 Predicted class label per sample.
288 """
--> 289 scores = self.decision_function(X)
290 if len(scores.shape) == 1:
291 indices = (scores > 0).astype(np.int)

~\Anaconda3\lib\site-packages\sklearn\linear_model\base.py in decision_function(self, X)
268 if X.shape[1] != n_features:
269 raise ValueError("X has %d features per sample; expecting %d"
--> 270 % (X.shape[1], n_features))
271
272 scores = safe_sparse_dot(X, self.coef_.T,

ValueError: X has 29 features per sample; expecting 84

最佳答案

您的新数据应具有与用于训练和保留原始模型的数据完全相同的列。如果新数据中分类变量的唯一值数量较少,请在执行 pd.get_dummies() 后手动为这些变量添加列,并将所有数据点的它们设置为零。

模型仅在获得所需的列数时才会工作。如果 pd.get_dummies 无法在较新的数据上创建所有这些列,您应该手动执行此操作。

编辑

如果您想在 pd.get_dummies() 步骤之后自动插入缺失的列,可以使用以下方法。假设 df_newdata 是将 pd.get_dummies() 应用于新数据集后的数据框,df_olddata 是在旧数据集(用于训练)上应用 pd.get_dummies() 时获得的 df,您可以简单地执行此操作:

df_newdata = df_newdata.reindex(labels=df_olddata.columns,axis=1)

这将自动在 df_newdata 中创建缺失的列(与 df_olddata 相比),并将所有行的这些列的值设置为 NaN。所以现在,您的新数据框具有与原始数据框相同的提取列。

希望这有帮助

关于python - ValueError:X 每个样本有 29 个特征;期待 84,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57438375/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com