20 sütunlu bir matrisim var. Son sütun 0/1 etiketlerdir.sklearn.cross_validation içinde train_test_split ve cross_val_score kullanımı arasındaki fark
Veriler, here numaralı bağlantıdır.
Veri kümesinde çapraz doğrulama kullanarak rasgele ormanı çalıştırmaya çalışıyorum. Ben farklı sonuçlar alıyorum sklearn.cross_validation.train_test_split
kullanılarak sklearn.cross_validation.cross_val_score
- Ben hemen hemen aynı kesin bir şey olduğunu düşünüyorum ne zaman: Ben Bunu yapmanın iki yöntem kullanabilirsiniz. Örnek vermek gerekirse, yukarıdaki kodda olduğu gibi yukarıdaki iki yöntemi kullanarak iki kat çapraz doğrulama yapıyorum.
import csv import numpy as np import pandas as pd from sklearn import ensemble from sklearn.metrics import roc_auc_score from sklearn.cross_validation import train_test_split from sklearn.cross_validation import cross_val_score #read in the data data = pd.read_csv('data_so.csv', header=None) X = data.iloc[:,0:18] y = data.iloc[:,19] depth = 5 maxFeat = 3 result = cross_val_score(ensemble.RandomForestClassifier(n_estimators=1000, max_depth=depth, max_features=maxFeat, oob_score=False), X, y, scoring='roc_auc', cv=2) result # result is now something like array([ 0.66773295, 0.58824739]) xtrain, xtest, ytrain, ytest = train_test_split(X, y, test_size=0.50) RFModel = ensemble.RandomForestClassifier(n_estimators=1000, max_depth=depth, max_features=maxFeat, oob_score=False) RFModel.fit(xtrain,ytrain) prediction = RFModel.predict_proba(xtest) auc = roc_auc_score(ytest, prediction[:,1:2]) print auc #something like 0.83 RFModel.fit(xtest,ytest) prediction = RFModel.predict_proba(xtrain) auc = roc_auc_score(ytrain, prediction[:,1:2]) print auc #also something like 0.83
Sorum şu:
neden ben
train_test_split
kullandığınızda yani, neden daha yüksek AUC (metrik kullanıyorum) olduğu, farklı sonuçlar alıyorum?Not: Daha kıvrımlar kullanırken (10 kıvrımlar diyelim), ilk hesaplama bana her zaman en yüksek AUC vererek, benim sonuçlarında desen çeşit olduğu görülmektedir. Yukarıdaki örnekte iki katlı çapraz doğrulamanın durumunda, ilk AUC her zaman ikinci olandan daha yüksektir; Her zaman 0.70 ve 0.58 gibi bir şey.
Yardımlarınız için teşekkürler!
, başlangıçta verilerinizi randomize edilir mi? Doğru hatırlamıyorsam, iki yöntemden biri veya her ikisi de verileri rastgele ayırma olmaksızın ayırmaya yarar. Bahsettiğiniz "örüntüyü" açıklayabilir, ancak muhtemelen ilk genel sonuçla daha zayıf olan sonuçları açıklayamasa da (başlangıçta) – KCzar
Hayır, veriler başlangıçta randomize edilmez. Sonuçların, cross_val_score'da neden aynı kalıbı sergilemesinin iyi bir açıklaması gibi görünmektedir. Benim durumumdaki cross_val_score'un tek rastgele parçası sanırım rastgeleForestClassifier'ın ağaçlarındaki özellikleri seçmek için algoritmasında bazı rastgeleliklere sahip olması.Bunun dışında, sadece ilk siparişe göre verileri n katına bölerse, belki de sorun budur. Uyandığımda birkaç saat içinde kontrol edeceğim, buradaki gecenin ortası! – evianpring
yüzden, evet, bu görev: p = np.random.permutation (len (y)) Sonuç = cross_val_score (ensemble.RandomForestClassifier (n_estimators = 1000, MAX_DEPTH = 5, max_features = 3, oob_score = False), X- [p], y [p], puanlama = 'roc_auc', cv = 2) – evianpring