Ошибка в использовании accuracy_score от sklearn в логистической регрессии

#python #logistic-regression #train-test-split

Вопрос:

Я выполняю логистическую регрессию с помощью метода регуляризации эластичной сети. Я пытаюсь предсказать, какие переменные связаны положительно или отрицательно. Ошибка возникает после запуска accuracy_score(y_true,y_pred), но я получил ошибку: «Ошибка значения: Найдены входные переменные с несогласованным количеством выборок: [9076, 9075]». Размер фрейма данных составляет 18151 obs. Как я могу исправить ошибку? Может ли быть так, что, когда я выполняю train_test_split на 50%, я получаю подвыборку с нечетным номером и подвыборку с четным номером?

 X2=df.iloc[:,23:41] y2=df["diab_inc"].values.reshape(-1,1) X2_train,X2_test,y2_train,y2_test=train_test_split(X2,y2,test_size=0.5,random_state=1234)  print (len(X2_train),len(X2_test),len(y2_train),len(y2_test)) [9075 9076 9075 9076]  l1_ratio=(.001,.005,.01,.05,.1,.3,.5,.7,.9,1) select=SelectFromModel(LogisticRegressionCV(cv=5, penalty='elasticnet', solver="saga", l1_ratios=l1_ratio, max_iter=10000)).fit(X2_train, y2_train) print("Accuracy {0:2%}".format(accuracy_score(y2_test,select.estimator_.predict(X2_train))))  --------------------------------------------------------------------------- ValueError Traceback (most recent call last) ----gt; 1 print("Accuracy {0:2%}".format(accuracy_score(y2_test,select.estimator_.predict(X2_train))))  /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/sklearn/utils/validation.py in inner_f(*args, **kwargs)  61 extra_args = len(args) - len(all_args)  62 if extra_args lt;= 0: ---gt; 63 return f(*args, **kwargs)  64   65 # extra_args gt; 0  /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/sklearn/metrics/_classification.py in accuracy_score(y_true, y_pred, normalize, sample_weight)  200   201 # Compute accuracy for each possible representation --gt; 202 y_type, y_true, y_pred = _check_targets(y_true, y_pred)  203 check_consistent_length(y_true, y_pred, sample_weight)  204 if y_type.startswith('multilabel'):  /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/sklearn/metrics/_classification.py in _check_targets(y_true, y_pred)  81 y_pred : array or indicator matrix  82 """ ---gt; 83 check_consistent_length(y_true, y_pred)  84 type_true = type_of_target(y_true)  85 type_pred = type_of_target(y_pred)  /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/sklearn/utils/validation.py in check_consistent_length(*arrays)  317 uniques = np.unique(lengths)  318 if len(uniques) gt; 1: --gt; 319 raise ValueError("Found input variables with inconsistent numbers of"  320 " samples: %r" % [int(l) for l in lengths])  321   ValueError: Found input variables with inconsistent numbers of samples: [9076, 9075]  

Ответ №1:

Что вы хотите сделать, так это сделать прогнозы для X2_test данных и сравнить их с основной истиной y2_test . В настоящее время вы используете обучающие данные для прогнозирования. Данные поезда и теста имеют разный размер, так как ваш полный набор данных содержит нечетное количество строк, и вы разделяете его на 50%, отсюда и ошибка.

 accuracy_score(y2_test,select.estimator_.predict(X2_test))