【发布时间】:2017-07-07 10:45:04
【问题描述】:
我正在尝试通过逻辑回归解决给定数据集上的分类问题(这不是问题)。为了避免过度拟合,我试图通过交叉验证来实现它(这就是问题所在):我缺少一些东西来完成程序。我的目的是确定准确性。
但让我具体一点。这就是我所做的:
- 我将集合分为训练集和测试集
- 我定义了要使用的对数回归预测模型
- 我使用 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))
我的问题:
-
据我了解直到最后才考虑测试集并且应该对训练集进行交叉验证。这就是我在 cross_val_predict 方法中插入 X_train 和 t_train 的原因。 Thuogh,我收到一条错误消息:
ValueError: Found input variables with inconsistent numbers of samples: [6016, 4812]其中6016是整个数据集中的样本数,4812是数据集拆分后训练集中的样本数
在这之后,我不知道该怎么办。我的意思是:X_test 和 t_test 什么时候开始发挥作用?我不明白交叉验证后应该如何使用它们以及如何获得最终的准确性。
额外问题:我还想在交叉验证。我怎样才能做到这一点?我已经看到定义管道可以帮助扩展,但我不知道如何将其应用于第二个问题。
非常感谢任何帮助 :-)
【问题讨论】:
标签: python machine-learning scikit-learn classification cross-validation