如何将特征集作为字典实现交叉验证和随机森林分类器?

时间:2017-02-26 18:05:02

标签: python numpy machine-learning scikit-learn supervised-learning

我的featuresets字典包含以下格式的元素:

({0: 0.48447204968944096, 
  1: 0.035093167701863354, 
  2: 0.07453416149068323, 
  3: 0.046583850931677016, 
  4: 0.0, 
  5: 0.09316770186335403,
  ...
  162: 1, 
  163: 1.0}, 'male')

当我尝试从sklearn库中实现cross_val_scorecross_val_predict时,它总是会显示一些错误

  

“浮动值不能是dict”。

有人可以帮我在Python中使用Linear SVC和Random-Forest分类器实现交叉验证吗?

我之前尝试过这个:

train_set, test_set = featuresets[1:1628], featuresets[1630:3257]
np.asarray(train_set)
np.asarray(test_set)
clf = SVC(kernel='linear', C=5)
predicted = cross_val_predict(clf, train_set, test_set, cv=10)
metrics.accuracy_score(test_set, predicted)

另外,我不知道如何在这里实现kfold交叉验证。

1 个答案:

答案 0 :(得分:1)

让我们先导入必要的模块:

import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score

您必须创建一个随机森林分类器的实例,如下所示:

clf = RandomForestClassifier()

然后您需要加载featuresets(我没有这些数据,因此我无法测试我的代码)并将您的分类变量转换为数字变量,例如通过字典:

featuresets = # your code here
gender = {'male': 0, 'female': 1}

下一步是将功能和标签存储为NumPy数组:

X = np.asarray([[i[1] for i in sorted(d.items())] for d, _ in featuresets])
y = np.asarray([gender[s] for _, s in featuresets])

现在,您可以通过拆分数据,拟合模型并连续10次计算得分(每次使用不同的拆分)来估计数据集上随机森林分类器的准确性:

scores = cross_val_score(clf, X, y, cv=10)
print('Scores =', scores)

如果您运行上面的代码段,则应该会打印出10个分数列表。