如何导入留下一次性CV分析的自己的数据scikit了解

时间:2016-05-31 14:57:23

标签: scikit-learn classification cross-validation supervised-learning

我有26篇文章分类为二进制类别,我进行了NB和5倍CV分析。我使用load_files()命令导入了我的数据,我得到了这个数组:

target': array([0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1]),
'target_names': ['negative', 'positive']

即使我在scikit学习网站上阅读LOO文档和用户指南,我也无法掌握如何使用我的数据。以下是该网站的示例:

from sklearn import cross_validation
X = np.array([[1, 2], [3, 4]])
y = np.array([1, 2])
loo = cross_validation.LeaveOneOut(2)
len(loo)
2
print(loo)
sklearn.cross_validation.LeaveOneOut(n=2)
for train_index, test_index in loo:
    print("TRAIN:", train_index, "TEST:", test_index)
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
    print(X_train, X_test, y_train, y_test)

例如,在scikit学习网站的上述例子中,y代表什么?是分类吗?什么是train_index / test_index?它来自哪里?

一些帮助将不胜感激。

此致

guzdeh

更新:

感谢Brad的回复。如果我理解你的答案,我需要将我的数据分成训练/测试集?我用我的NB分析(75:25)做到了这一点,但是我的5倍CV实现,这个分裂(80:20)由算法执行。这是我的代码(使用4种不同的分类器):

def evaluate_cross_validation(clf, X, y, K):
    # create a k-fold cross validation iterator of k=5 folds
    cv = KFold(len(y), K, shuffle=True, random_state=0)
    # by default the score used is the one returned by score >>> method of the estimator (accuracy)
    scores = cross_val_score(clf, X, y, cv=cv)
    print scores
    print ("Mean score: {0:.3f} (+/-{1:.3f})").format(np.mean(scores), sem(scores))

clfs = [clf_1, clf_2, clf_3, clf_4]

for clf in clfs:
    evaluate_cross_validation(clf, bunch.data, bunch.target, 5)

Bunch.data是我加载了load_files()的文章,bunch.target是我的两个班级。所以,如果我的想法是正确的,留下一次成为N倍CV,那么我可以用上述代码进行分析,K =文章数量?

但是,我仍然不明白上面示例中的y = np.array([1, 2])是什么以及为什么需要训练和测试集,因为除了一个训练集之外的所有文章都是测试集。

1 个答案:

答案 0 :(得分:0)

因此,对于这些类型的ML算法,您需要了解“特征”,“目标”,“训练集”和“测试集”的区别。看来您的数据集中只有一个目标。这些将是您尝试预测的值。因此,对于此算法,X_train必须是有关文章的信息,y_train将是您提供的数组的关联negativepositive值。 X_testy_test将是您使用算法进行预测的功能,目标对,然后进行评分以估算您的设置效果。

考虑features类似线索,有一个线索列表,您正在尝试学习如何将这些线索组合起来预测target。现在你所拥有的只是答案(目标),没有任何线索,没有学习可以发生这样的事情。

index而言,我建议使用像Pandas这样的库来创建内置索引的数据帧

http://pandas.pydata.org/

这有点细节,因为没有什么可以继续下去,但这应该会让你朝着正确的方向前进。