Логистическая регрессия на наборе данных из CSV - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь реализовать логистическую регрессию в моем наборе данных, который является

#,sugars_100g,energy_100g,is_over200
0,0.0,0.0,1
1,14.29,2243.0,1
2,17.86,1941.0,1
3,3.57,2540.0,1
4,0.0,1552.0,1
5,11.54,1933.0,1
6,0.0,1490.0,1
...
...
...

И моя попытка сделать это:

df = pd.read_csv("Sugar_energy.csv")
x_train, x_test, y_train, y_test = train_test_split(df[['sugars_100g']], df.is_over200,test_size=0.1)
model = LogisticRegression()
model.fit(x_train, y_train)
wide_test = [i + 1 for i in range(2000)]
wide_test = np.array(wide_test).reshape(-1, 1)
is_higher_than_200 = model.predict(wide_test)
plt.scatter(wide_test, is_higher_than_200, marker ='+', color='red')
plt.show()

Этот код работает на другом наборе данных, который у меня есть, но янужно сделать это на приведенном выше.К сожалению, здесь я получаю эту ошибку:

    /Users/myname/PycharmProjects/FoodQuerks/venv/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.
  FutureWarning)
/Users/myname/PycharmProjects/FoodQuerks/venv/lib/python3.6/site-packages/sklearn/utils/validation.py:761: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().
  y = column_or_1d(y, warn=True)
Traceback (most recent call last):
  File "/Users/myname/PycharmProjects/FoodQuerks/Main/LogisticRegression.py", line 14, in <module>
    model.fit(x_train, y_train)
  File "/Users/myname/PycharmProjects/FoodQuerks/venv/lib/python3.6/site-packages/sklearn/linear_model/logistic.py", line 1305, in fit
    sample_weight=sample_weight)
  File "/Users/myname/PycharmProjects/FoodQuerks/venv/lib/python3.6/site-packages/sklearn/svm/base.py", line 881, in _fit_liblinear
    " class: %r" % classes_[0])
ValueError: This solver needs samples of at least 2 classes in the data, but the data contains only one class: 1

Я пробовал решение из здесь , поэтому я поставил:

x_train, y_train = shuffle(x_train, y_train)

, прежде чем назначить данные дляпоезд, но не помог.

1 Ответ

0 голосов
/ 02 января 2019

Вам нужно изменить эту строку model.fit(x_train, y_train) на model.fit(x_train, y_train.values.ravel())

В pandas dataframes .values.ravel() функции преобразуют вектор-столбец в массив 1d, поэтому он должен выполнять свою работу.

...