使用Scikit Learn
我在Python中构建了一些基本的情感分类器。我现在正在尝试使用交叉验证技术进行评估。我的数据集包含100,000条正面和负面的推文,名为training_data
。
每次我需要从整个集合中获取20,000块用于测试,然后使用剩余的180,000进行训练。我遇到的问题是当块不在任何一端时,我如何只获取该块的任何一侧的数据?
我尝试过像
这样的事情training_data.data[:20000] + training_data.data[40000:]
但它说
操作数不能与不同形状一起广播
然而,我认为dataset.data
只是一个列表。
这里要求的是training_data.data [1:10]的输出示例:
["@karoliiinem i'm personally following the next 300 people that will follow --&
gt; @omgfantasy rt once you're done so i'd know ?\n", '@kristensaywha i know s
tupid people\n', 'i might be going shopping tomorrow at the beach ) i hope so\n'
, '@_sophieallam cannae wait for a 5 hour train journey \n', 'wifey needs a hug
\n', "i'm scared to drive to daytona with this car \n", "@xxiluvdahviexx i'm so
sorry\n", "@chooselogoism that sucks i can't see w/o my glasses at all\n", 'x f
actor \n']
我想我在列表中寻找某种操作,您可以在其中获取除指定切片之外的所有数据?
答案 0 :(得分:0)
sklearn.cross_validation.KFold
为您生成这些折叠。
from sklearn.cross_validation import KFold
cv = KFold(180000, 9)
返回一个迭代器,它在每一步产生训练和测试索引。如果您的分类符被称为your_classifier
,则您的数据(推文)为X
而您的目标(情绪)为y
,那么您可以使用sklearn.cross_validation.cross_val_score
来获取分数所有的折叠:
from sklearn.cross_validation import cross_val_score
scores = cross_val_score(your_classifier, X, y, cv=cv, scoring= ...)
其中scoring
是一个非常重要的事情。如果你使用一个天真的得分手,比如精确度,它会计算正确的预测,你的班级必须平衡,或者你必须意识到你的估计师可能只是预测更频繁的班级。如果您想平衡课程,可能还需要查看sklearn.cross_validation.StratifiedKFold
(doc)。
答案 1 :(得分:0)
您需要使用cross_validation
模块,该模块有许多可以使用的方案,一个是k-fold
。
我正在从sklearn
手册页here复制粘贴:
>>> from sklearn import cross_validation
>>> X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
>>> y = np.array([1, 2, 3, 4])
>>> kf = cross_validation.KFold(4, n_folds=2)
>>> len(kf)
2
>>> print(kf)
sklearn.cross_validation.KFold(n=4, n_folds=2)
>>> for train_index, test_index in kf:
... 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]
TRAIN: [2 3] TEST: [0 1]
TRAIN: [0 1] TEST: [2 3]