我刚开始学习 Python,如果这个问题/错误很基础,请原谅我。
我正在做 Kaggle 的生物反应教程。我遇到了这个错误
C:\Anaconda\lib\site-packages\sklearn\cross_validation.py:65: DeprecationWarning: The indices parameter is deprecated and will be removed (assumed True) in 0.17 stacklevel=1) 结果: 0.458614231133
有人知道这是什么意思吗?我已经在谷歌上搜索了很多次,但找不到答案。
我运行的脚本是:
from sklearn.ensemble import RandomForestClassifierfrom sklearn import cross_validationimport loglossimport numpy as npdef main(): #读取数据,并解析为训练和目标集 dataset = np.genfromtxt(open('train.csv','r'), delimiter=',', dtype='f8')[1:] target = np.array([x[0] for x in dataset]) train = np.array([x[1:] for x in dataset]) #在这种情况下我们将使用随机森林,但这可以是任何分类器 cfr = RandomForestClassifier(n_estimators=100) #简单的 K-Fold 交叉验证。5 折。 #(注意:在旧版本的 scikit-learn 中,"n_folds" 参数被命名为 "k"。) cv = cross_validation.KFold(len(train), n_folds=5, indices=False) #遍历训练和测试的交叉验证段,并 #在每个段上运行分类器,将结果聚合到一个列表中 results = [] for traincv, testcv in cv: probas = cfr.fit(train[traincv], target[traincv]).predict_proba(train[testcv]) results.append( logloss.llfun(target[testcv], [x[1] for x in probas]) ) #打印出交叉验证结果的平均值 print "结果: " + str( np.array(results).mean() )if __name__=="__main__": main()
我认为它调用的是这个:
__author__ = 'nickd'import scipy as spdef llfun(act, pred): epsilon = 1e-15 pred = sp.maximum(epsilon, pred) pred = sp.minimum(1-epsilon, pred) ll = sum(act*sp.log(pred) + sp.subtract(1,act)*sp.log(sp.subtract(1,pred))) ll = ll * -1.0/len(act) return ll
再次,如果这是基础的东西,真的很抱歉。我确实以前从未做过这个。
回答:
这意味着当你使用 indices
关键字参数调用 cross_validation.KFold
时,未来版本将不再支持它:
cv = cross_validation.KFold(len(train), n_folds=5, indices=False)
根据错误消息,在 0.17 版本中,你将得到 indices=True
的效果。消息指出他们将移除这个关键字参数,很可能他们不会忽略未使用的关键字参数,因此,如果你继续尝试传入 indices,在 0.17 版本中可能会得到 TypeError
异常。