1

我有我的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,它总是会导致显示一些错误说

“浮点值不能是字典“。

可能有人请帮助我实现使用线性SVC和随机森林分类Python中的交叉验证?

我曾试图在此之前:

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交叉验证。

+0

转换您的数据,以numpy的阵列,就是所有 – lejlot

+0

你上面显示的数据是有两个元素的元组:第一是快译通,另一个是字符串。字符串是你想要预测的目标变量。你的'cross_val_predict'的用法也是错误的。 –

+0

'featuresets'是什么类型? – Tonechas

回答

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个分数的列表。

+0

随机森林分类器呢?它会以这种方式工作吗? –

+0

我已经编辑我的答案,以更好地满足您的问题 – Tonechas

+0

是的,这是工作。非常感谢您的时间和精力:) –