【发布时间】:2014-08-28 16:29:15
【问题描述】:
我的问题是我生成了一个函数来存储每个分类器中每个逐步模型的 10 倍交叉验证分数。例如,对于朴素贝叶斯,我有两个模型,一个只使用一个变量,而另一些则使用两个。类似于决策树模型。该功能类似于
def crossV(clf):
cvOutcome=pd.DataFrame()
index=pd.DataFrame()
classifier=pd.DataFrame()
for i in range(4)[2:]:
tt=array(tuple(x[1:i] for x in modelDataFullnew))
qq=array(tuple(x[0] for x in modelDataFullnew))
scores=cross_validation.cross_val_score(clf, tt, qq, cv=10)*100
index_i=list(np.repeat(i-1,10))
classifier_i=list(np.repeat(str(clf)[:-2],10))
scores=list(scores)
cvOutcome=cvOutcome.append(scores)
index=index.append(index_i)
classifier=classifier.append(classifier_i)
merge=pd.concat([index,cvOutcome,classifier],axis=1)
merge.columns=['model','rate','classifier']
return(merge)
from sklearn.naive_bayes import GaussianNB as gnb
clf_nb=gnb()
from sklearn import tree
clf_dt=tree.DecisionTreeClassifier()
如果我这样做crossV(clf_nb),它会给我结果
model rate classifier
1 92.558679 GaussianNB
1 92.558381 GaussianNB
1 92.558381 GaussianNB
1 92.558381 GaussianNB
1 92.558381 GaussianNB
我的问题是如何将此函数应用于多个分类器并将其结果附加为长数据框,例如
model rate classifier
1 92.558679 GaussianNB
1 92.558381 GaussianNB
1 92.558381 GaussianNB
1 92.558381 GaussianNB
1 92.558381 GaussianNB
1 93.25 DecisionTree
1 93.25 DecisionTree
我试过这段代码,但它不起作用:
hhh=[clf_nb,clf_dt]
g=pd.DataFrame()
while i in hhh:
g=g.append(crossV(i))
我还尝试了数组中的映射函数,例如
map(crossV,(clf_nb,clf_dt))
它有效,但只是给我一个更大的列表,我不知道如何将它转换为数据框。
【问题讨论】:
-
我试过了但结果什么都没有我不知道这里出了什么问题
-
你试过
df = pd.concat( (crossV(clf_nb), crossV(clf_dt)) ) -
这段代码有效,但如果我有 20 个分类器怎么办?我想编写一个通用函数来做到这一点,但不知何故它对我不起作用......
标签: python pandas append scikit-learn