Ваша проблема заключается в вашем "правильном" столбце. Вы предоставляете строки («да» и «нет»), где ожидаются числа.
Например, замените все «да» на 1, а все «нет» на 0 и повторите попытку.
См. Следующий минимальный пример:
test.csv:
x,y,correct,zeros
1,1,1.0,0
2,2,0.0, 0
1,2,0.0,0
3,1,1.0,0
3,1,1.0,0
4,2,0.0, 0
5,2,0.0,0
6,1,1.0,0
7,1,1.0,0
8,2,0.0, 0
9,2,0.0,0
10,1,1.0,0
11,1,1.0,0
12,1,1.0,0
13,1,1.0,0
14,1,1.0,0
15,1,1.0,0
16,1,1.0,0
Содержимое файла python:
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
data = pd.read_csv("./test.csv")
X = data[["x","y"]]
y = data[["correct"]]
knn = LogisticRegression()
scores = cross_val_score(knn, X, y.values.ravel(), cv=3, scoring="accuracy")
scores.mean()
Попробуйте заменить строку
X = data[["x","y"]]
с X = data[["zeros"]]
и обратите внимание на разницу!
Из статистики ваших данных мы можем узнать, что 318 из 477 выборок в вашем наборе данных относятся к группе 0 (или «нет»). Это 2/3 или 0.666...
Поэтому, если ваша модель не может извлечь что-либо из предоставленных функций, она всегда будет выводить ноль (так как все коэффициенты равны нулю). Следовательно, для любого ввода прогнозируемый класс будет равен 0 (или «нет»). Вот почему вы всегда получаете один и тот же балл: модель всегда предсказывает, что 0 и 2/3 ваших данных принадлежат нулевому классу, поэтому ваша модель в 66% случаев правильная.
Используя мои предоставленные образцы данных, вы видите, что они ДЕЙСТВИТЕЛЬНО имеют значение, если мы используем столбцы «x» и «y» или столбец «нули». В первом случае мы получаем оценку более 72%. Если мы просто используем бессмысленные «нули», мы получаем 66% из-за распределения классов нашего набора данных.