使用一个完全受过培训的文件分类,另一个完全受过测试的文件分类

时间:2018-08-21 13:22:51

标签: python python-3.x machine-learning scikit-learn text-classification

我正在尝试进行分类,其中一个文件完全是培训,另一个文件完全是测试。这是可能的?我尝试过:

<form>
  <select name="users" onchange="showUser(this.value)">
  <option value="">Select a person:</option>
  <option value="1">Peter Griffin</option>
  <option value="2">Lois Griffin</option>
  <option value="3">Joseph Swanson</option>
  <option value="4">Glenn Quagmire</option>
  </select>
</form>

<div id="txtHint"><b>Person info will be listed here...</b></div>

我将test_size设置为零,因为我不想在这些文件中有分区。而且我还在训练和测试文件中应用了Count和TFIDF。

我的输出错误:

  

回溯(最近通话最近一次):

     

文件“ classif.py”,第34行,在       X_train,y_train = train_test_split(X,y,test_size = 0,random_state = 100)

     

ValueError:太多值无法解包(预期2)

2 个答案:

答案 0 :(得分:5)

@Alexis明确指出并解决了train_test_split中遇到的错误。再一次,我也建议不要使用train_test_split,因为它除了洗牌之外不会做任何事情。

但是我想强调另一个重要的观点,即,如果要分开保存训练文件和测试文件,那么就不要单独使用矢量化程序。它将为训练和测试文件创建不同的列。示例:

cv = CountVectorizer()
train=['Hi this is stack overflow']
cv.fit(train)
cv.get_feature_names()

输出:     ['hi', 'is', 'overflow', 'stack', 'this']

test=['Hi that is not stack overflow']
cv.fit(test)
cv.get_feature_names()

输出:     ['hi', 'is', 'not', 'overflow', 'stack', 'that']

因此,单独安装它们将导致列不匹配。因此,您应该先合并训练文件和测试文件,然后再合并fit_transform矢量化器,否则,如果事先没有测试数据,则只能使用适合火车数据的矢量化器转换测试数据,这将忽略火车数据中不存在的单词

答案 1 :(得分:0)

因此,首先,对于出现的错误,只需按如下所示编写代码,即可正常工作。

X_train, y_train,_,_ = train_test_split(X, y, test_size = 0, random_state = 100)
X_test, y_test,_,_ = train_test_split(X_T, y_t, test_size = 0, random_state = 100)

它返回4组代码,预计您将有4个变量来接收它们。放置_只是为了让所有人都知道您不在乎这些输出。

第二,我真的不知道你为什么要进行这种操作。如果您想对数据进行混洗,那不是最好的方法。而且您之前已经做过。