同じ RandomForest 手法と同じデータセットを使用しているときに、WEKA と scikit の結果に独特の違いがあります。scikit を使用すると、約 0.62 の AUC が得られます (常に、広範なテストを行ったため)。ただし、WEKA を使用すると、0.79 に近い結果が得られます。それは大きな違いです!
アルゴリズムをテストしたデータセットは KC1.arff で、そのコピーをパブリック ドロップボックス フォルダーhttps://dl.dropbox.com/u/30688032/KC1.arffに置きました。WEKA の場合、単純にhttp://www.cs.waikato.ac.nz/ml/weka/downloading.htmlから .jar ファイルをダウンロードしました。WEKA では、交差検証パラメーターを 10 倍、データセットを KC1.arff、アルゴリズムを "RandomForest -l 19 -K 0 -S 1" に設定しました。次に、コードを実行しました!WEKA で結果を生成したら、ファイル、.csv または .arff として保存する必要があります。そのファイルを読み、「Area_under_ROC」列を確認すると、0.79 に近いはずです。
以下は、scikit の RandomForest のコードです。
import numpy as np
from pandas import *
from sklearn.ensemble import RandomForestClassifier
def read_arff(f):
from scipy.io import arff
data, meta = arff.loadarff(f)
return DataFrame(data)
def kfold(clr,X,y,folds=10):
from sklearn.cross_validation import StratifiedKFold
from sklearn import metrics
auc_sum=0
kf = StratifiedKFold(y, folds)
for train_index, test_index in kf:
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
clr.fit(X_train, y_train)
pred_test = clr.predict(X_test)
print metrics.auc_score(y_test,pred_test)
auc_sum+=metrics.auc_score(y_test,pred_test)
print 'AUC: ', auc_sum/folds
print "----------------------------"
#read the dataset
X=read_arff('KC1.arff')
y=X['Defective']
#changes N, and Y to 0, and 1 respectively
s = np.unique(y)
mapping = Series([x[0] for x in enumerate(s)], index = s)
y=y.map(mapping)
del X['Defective']
#initialize random forests (by defualt it is set to 10 trees)
rf=RandomForestClassifier()
#run algorithm
kfold(rf,np.array(X),y)
#You will get an average AUC around 0.62 as opposed to 0.79 in WEKA
関連論文の実験結果に示されているように、実際の auc 値は約 0.79 であるため、問題は scikit ランダム フォレストを使用する実装にあることに注意してください。
あなたの親切な助けは非常に高く評価されます!!
どうもありがとうございました!