Я пытаюсь проверить свои данные с помощью Kfold.
def printing_kfold_score(X,y):
fold = KFold(5,shuffle=False)
recall_accs=[]
for train_index, test_index in fold.split(X):
X_train, X_test = X.iloc[train_index,:], X.iloc[test_index,:]
y_train, y_test = y.iloc[train_index,:], y.iloc[test_index,:]
# Call the logistic regression model with a certain C parameter
lr = LogisticRegression(C = 0.01, penalty = 'l1',solver = 'liblinear')
# Use the training data to fit the model. In this case, we use the portion of the fold to train the model
lr.fit(X_train, y_train.values.ravel())
# Predict values using the test indices in the training data
y_pred_undersample = lr.predict(X_test)
# Calculate the recall score and append it to a list for recall scores representing the current c_parameter
recall_acc = recall_score(y_test,y_pred_undersample)
recall_accs.append(recall_acc)
print(np.mean(recall_accs))
printing_kfold_score(X_undersample,y_undersample)
X_undersample - это фрейм данных (984,29)
y_undersample - это фрейм данных (984,1)
Я получаю следующее предупреждение:
0.5349321454470113
C:\Users\sudha\Anaconda3\lib\site-packages\sklearn\metrics\_classification.py:1272: UndefinedMetricWarning: Recall is ill-defined and being set to 0.0 due to no true samples. Use `zero_division` parameter to control this behavior.
_warn_prf(average, modifier, msg_start, len(result))
C:\Users\sudha\Anaconda3\lib\site-packages\sklearn\metrics\_classification.py:1272: UndefinedMetricWarning: Recall is ill-defined and being set to 0.0 due to no true samples. Use `zero_division` parameter to control this behavior.
_warn_prf(average, modifier, msg_start, len(result))
Почему я получаю это предупреждение, мои данные идеально сбалансированы (50/50), это предупреждение и низкая оценка отзыва не ожидалась. Можете ли вы сказать мне, что я делаю не так?
Я попытался распечатать форму значения и значение x_test и y_test.
x_train shape (788, 29)
x_test shape (196, 29)
y_train shape (788, 1)
y_test shape (196, 1)
x_test V1 V2 V3 ... V27 V28 normAmount
541 -2.312227 1.951992 -1.609851 ... 0.261145 -0.143276 -0.353229
623 -3.043541 -3.157307 1.088463 ... -0.252773 0.035764 1.761758
4920 -2.303350 1.759247 -0.359745 ... 0.039566 -0.153029 0.606031
y_test Class
38042 0
170554 0
16019 0
Это из-за первого столбца, который представляет индекс?
Спасибо.
y_test
, в одной из ваших складок, не имеет положительных случаев - особенно с выборкой всего 984 записей. Хотя, если зависимая переменная действительно сбалансирована 50 на 50, это может быть маловероятным. - person blacksite   schedule 16.04.2020y_test
в вашем DataFrame кажется индексом, гдеClass
кажется (хотя здесь мы видим только 0) двоичным. Можете ли вы предоставить количество каждого значения по классам для прогнозируемых и фактических векторов классов? - person blacksite   schedule 17.04.2020y_pred_undersample [0 1 1 1 0 1 0 0 1 0 1 0 1 0 0 1 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 1 0 0 1 0 1 0 0 1 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 1 1 0 0 0 0 0 0 1 0 0 0 1 1 1 0 1 0 0 1 1 0 0 1 0 1 0 1 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0 1 1 1 1 1 0 1 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 0 1 0 1 1 0 0 0 0 0 1 1 1 0 1 1 0 1 1 1 0 0 1 0 1 1 0 0 1 0 1 0 1 1 1 0 0 1 1 0 0 0 0 0 1 0 1 1 0 1 1 1 0 1 0 0 0 0 0 1 0 0 1 1]
и y_test меняются, иногда все 0, иногда 1 и т. д. - person AMIT BISHT   schedule 18.04.2020ValueError: This solver needs samples of at least 2 classes in the data, but the data contains only one class: 0
- person AMIT BISHT   schedule 18.04.2020