Python 安装sklearn后如何获取标签的有序列表

Python 安装sklearn后如何获取标签的有序列表,python,pandas,machine-learning,scikit-learn,Python,Pandas,Machine Learning,Scikit Learn,此代码中的几个问题: 为什么我需要交叉验证、训练测试分割线来拟合和预测分类器?(我没有对我的数据做任何预处理,除了我已经做的停止字删除) 测试和培训指标是否与分类和预测标签相对应?我的目标是在拟合和预测标签后,按原始顺序获取所有标签。我用于培训和测试的功能和标签来自pandas数据框(两列),我需要预测的标签,以便将它们反馈到pandas数据框中 是否有一种方法可以预测整个集合的标签,而不仅仅是测试集合 使用ShuffleSplit和train_test_拆分是多余的。您甚至没有使用Shuffl

此代码中的几个问题:

  • 为什么我需要交叉验证、训练测试分割线来拟合和预测分类器?(我没有对我的数据做任何预处理,除了我已经做的停止字删除)
  • 测试和培训指标是否与分类和预测标签相对应?我的目标是在拟合和预测标签后,按原始顺序获取所有标签。我用于培训和测试的功能和标签来自pandas数据框(两列),我需要预测的标签,以便将它们反馈到pandas数据框中
  • 是否有一种方法可以预测整个集合的标签,而不仅仅是测试集合
    使用ShuffleSplit和train_test_拆分是多余的。您甚至没有使用ShuffleSplit返回的索引

    下面是如何使用ShuffleSplit返回的索引的示例。X和y是np数组。X是按特征数计算的实例数。y包含每行的标签

    train_index, test_index = next(iter(ShuffleSplit(821, train_size=0.2, test_size=0.80, random_state=42)))
    print train_index, len(train_index)
    print test_index, len(test_index)
    
    features_train, features_test, labels_train, labels_test = cross_validation.train_test_split(features, labels, train_size=0.33, random_state=42)
    
    clf = DecisionTreeClassifier()
    clf.fit(features_train, labels_train)
    pred = clf.predict(features_test, labels_test)
    print pred, len(pred)
    
    你不应该测试你的训练数据!但如果你想知道会发生什么,就去做吧

    train_inds, test_inds = train_test_split(range(len(y)),test_size=0.33, random_state=42)
    X_train, y_train = X[train_inds], y[train_inds]
    X_test , y_test  = X[test_inds] , y[test_inds]
    
    此外,您不需要传递标签来进行预测。你应该使用

    pred = clf.predict(features_train)
    

    使用ShuffleSplit和train_test_拆分是多余的。您甚至没有使用ShuffleSplit返回的索引

    下面是如何使用ShuffleSplit返回的索引的示例。X和y是np数组。X是按特征数计算的实例数。y包含每行的标签

    train_index, test_index = next(iter(ShuffleSplit(821, train_size=0.2, test_size=0.80, random_state=42)))
    print train_index, len(train_index)
    print test_index, len(test_index)
    
    features_train, features_test, labels_train, labels_test = cross_validation.train_test_split(features, labels, train_size=0.33, random_state=42)
    
    clf = DecisionTreeClassifier()
    clf.fit(features_train, labels_train)
    pred = clf.predict(features_test, labels_test)
    print pred, len(pred)
    
    你不应该测试你的训练数据!但如果你想知道会发生什么,就去做吧

    train_inds, test_inds = train_test_split(range(len(y)),test_size=0.33, random_state=42)
    X_train, y_train = X[train_inds], y[train_inds]
    X_test , y_test  = X[test_inds] , y[test_inds]
    
    此外,您不需要传递标签来进行预测。你应该使用

    pred = clf.predict(features_train)
    
    tl;博士
  • 因为你的决策树分类器必须经过训练才能预测任何事情。这不是一个神奇的算法。必须先向它展示如何做的示例,然后才能确定如何处理其他事情

    cross\u validation.test\u train\u split()
    通过将数据拆分为测试和培训数据集来简化这一过程,您可以在以后分析数据集的性能。否则,您将无法评估决策树分类器的实际性能

    您可以创建自己的测试和培训数据,而无需使用
    test\u train\u split()
    (我怀疑这正是您试图使用
    shuffliesplit()
    )所做的),但您至少需要一些培训数据

  • test\u index
    train\u index
    与您的数据无关。句号。它们来自随机生成的过程,与
    test\u train\u split()
    的功能完全无关

    ShuffleSplit()
    的目的是为您提供索引,以便将数据划分到培训和测试中
    test\u train\u split()
    将根据这些索引选择自己的索引和分区。你应该明智地使用其中一个

  • 对。你可以随时打电话

    pred=clf.predict(功能)
    pred=clf.predict(功能测试+功能训练)

  • 全部故事
    • 如果要正确执行此操作,您需要
      交叉验证。交叉验证的全部目的是避免过度拟合

      基本上,如果你在训练和测试数据上运行你的模型,那么你的模型在训练集上会表现得非常好(因为,好吧,这就是你训练它的原因),这会扭曲你的模型在真实数据上表现得如何的整体指标

      这很像让学生在考试中表现,然后在现实生活中表现:如果你想知道你的学生是否从备考过程中学习,你不给他另一次考试,你要求他在现实世界中展示他处理未知和复杂数据的技能

      如果您想知道您的模型是否有用,那么您需要交叉验证。最好是:

      在预测问题中,一个模型通常被给定一个已知数据集 运行培训的数据(培训数据集),以及 对模型进行测试的未知数据(或首次看到的数据) (测试数据集)

      交叉验证的目标是定义一个 用于在培训阶段“测试”模型的数据集(即 验证数据集),为了限制过度拟合等问题,请给出 关于模型如何推广到独立数据集的见解 (例如,来自真实问题的未知数据集)等

      cross\u validation.train\u test\u split
      除了为您将数据集拆分为培训和测试数据外,什么都不做

    • 但也许你不在乎指标,这很好。然后问题就变成了:是否可以在没有训练数据集的情况下运行决策树分类器

      答案是否定的。决策树分类器是:在将模型推广到新结果之前,需要对数据进行训练。如果你不给他们任何训练数据,它将无法处理你输入的任何数据
      predict

    • 最后,虽然完全有可能获得整套产品的标签(请参见tl;dr),但如果你真的关心是否得到了合理的结果,这是一个非常糟糕的想法

      您已经有了测试和培训数据的标签。您不需要另一列包含对测试数据的预测,因为它们要么完全相同,要么非常接近相同

      我想不出任何一个有意义的理由来获取训练数据的预测结果,除非尝试优化训练数据的性能。如果这就是你想要做的,那就去做吧。你现在所做的绝对不是