Я пытаюсь решить проблему классификации по заданному набору данных с помощью логистической регрессии (и это не проблема). Чтобы избежать переобучения, я пытаюсь реализовать его с помощью кросс-валидации (и вот в чем проблема): есть что-то, что мне не хватает для завершения программы. Моя цель здесь - определить точность .Логистическая регрессия и кросс-валидация в Python (с sklearn)
Но позвольте мне быть конкретным. Это то, что я сделал:
- Я разделить набор на множество поездов и испытательная установка
- Я определил модель прогнозирования logregression, который будет использоваться
- я использовал метод cross_val_predict (в sklearn.cross_validation) сделать предсказания
- Наконец, я измерил точность
Вот код:
import pandas as pd
import numpy as np
import seaborn as sns
from sklearn.cross_validation import train_test_split
from sklearn import metrics, cross_validation
from sklearn.linear_model import LogisticRegression
# read training data in pandas dataframe
data = pd.read_csv("./dataset.csv", delimiter=';')
# last column is target, store in array t
t = data['TARGET']
# list of features, including target
features = data.columns
# item feature matrix in X
X = data[features[:-1]].as_matrix()
# remove first column because it is not necessary in the analysis
X = np.delete(X,0,axis=1)
# divide in training and test set
X_train, X_test, t_train, t_test = train_test_split(X, t, test_size=0.2, random_state=0)
# define method
logreg=LogisticRegression()
# cross valitadion prediction
predicted = cross_validation.cross_val_predict(logreg, X_train, t_train, cv=10)
print(metrics.accuracy_score(t_train, predicted))
Мои проблемы:
Из того, что я понимаю тест набор не следует рассматривать до самого конца и перекрестной проверки должны быть сделаны на обучающем наборе. Вот почему я вставил X_train и t_train в метод cross_val_predict. Thuogh, я получаю высказывание об ошибке:
ValueError: Found input variables with inconsistent numbers of samples: [6016, 4812]
где 6016 это количество образцов в наборе данных, и 4812 является количество образцов в обучающей выборки, после того, как набор данных был разделен
После этого я не знаю, что делать. Я имею в виду: , когда X_test и t_test входят в игру? Я не понимаю, как я должен использовать их после кросс-валидации и как получить окончательную точность.
бонус вопрос: Я хотел бы также выполнить масштабирования и снижения размерности (через отбор признаков или PCA) в пределах каждой стадии перекрестной проверки. Как я могу это сделать? Я видел, что определение конвейера может помочь с масштабированием, но я не знаю, как применить это ко второй проблеме.
Я бы очень признателен за любую помощь :-)
Большое спасибо, человек! Я исправил код, и теперь он работает.Цель внутри функций не была действительно проблемой, потому что: -1 в моем коде убрал ее, так как это был последний столбец. Таким образом, реальная проблема, по-видимому, заключалась в том, что цель не была np.array, как вы указали (я сказал, что я действительно не понимаю, каким образом таинственный способ связан с ошибкой размера, возвращаемой машиной lol). Есть ли у вас какие-либо идеи о том, как завершить процесс, например, как сделать окончательный тест? Я немного смущен тем, что я должен сейчас делать. – Harnak
Я изменил свой ответ, чтобы включить завершенный процесс, используя 'model_selection.cross_val_score'. Что касается ошибок размера, то работа между pd.dataframes и np.ndarrays может быть болью. Вы можете печатать тусклые изображения каждого из них, используя 'x.shape' для устранения неполадок. Лучший способ изучить этот материал IMO - это выкопать документы и учебники sklearn. –
Я не уверен, что понимаю это правильно. Итак, использование cross_val_score делает предыдущее разделение ненужным? Я имею в виду: не следует ли перекрестная проверка только на тренировочном наборе, а не на целом? Или, может быть, мне не хватает перекрестной проверки. – Harnak