Я работаю над сценарием, используя API-интерфейс Lending Club, чтобы предсказать, будет ли кредит «выплачиваться полностью» или «списываться». Для этого я использую 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