我正在尝试从sci-kit中运行随机森林分类器学习并获得可疑的错误输出 - 不到1%的预测是正确的。该模型的表现远比偶然。我相对较新的Python,ML和sci-kit学习(三重打击),我担心的是我缺少一些基本的东西,而不是需要微调参数。我希望的是更有经验的眼睛来查看代码并查看设置是否有问题。
我正在尝试根据单词出现来预测电子表格中行的类 - 因此每行的输入是一个数组,表示每个单词出现的次数,例如[1 0 0 2 0 ... 1]。我正在使用sci-kit learn的CountVectorizer进行此处理 - 我将其包含在每行中包含单词的字符串中,并输出单词出现数组。如果这个输入由于某种原因不合适,那可能是出现问题的地方,但我没有在网上找到任何内容,或者在文档中发现了这种情况。
现在,森林正在大约0.5%的时间正确回答。使用与SGD分类器完全相同的输入产生接近80%,这表明我正在进行的预处理和矢量化很好 - 这是RF分类器特有的。我的第一反应是寻找过度拟合,但即使我在 training 数据上运行模型,它仍然几乎所有错误。
我玩过很多树木和训练数据,但对我来说这似乎没什么变化。我试图只显示相关代码,但如果有用,可以发布更多代码。第一篇SO帖子,所有的想法和反馈都很受欢迎。
#pull in package to create word occurence vectors for each line
from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer(min_df=1,charset_error='ignore')
X_train = vectorizer.fit_transform(train_file)
#convert to dense array, the required input type for random forest classifier
X_train = X_train.todense()
#pull in random forest classifier and train on data
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators = 100, compute_importances=True)
clf = clf.fit(X_train, train_targets)
#transform the test data into the vector format
testdata = vectorizer.transform(test_file)
testdata = testdata.todense()
#export
with open('output.csv', 'wb') as csvfile:
spamwriter = csv.writer(csvfile)
for item in clf.predict(testdata):
spamwriter.writerow([item])
答案 0 :(得分:1)
如果随机森林(RF)你在训练集X_train上变得如此糟糕,那么肯定是错误的,因为你应该获得超过90%的巨大百分比。 请尝试以下(首先是代码段):
print "K-means"
clf = KMeans(n_clusters=len(train_targets), n_init=1000, n_jobs=2)
print "Gaussian Mixtures: full covariance"
covar_type = 'full' # 'spherical', 'diag', 'tied', 'full'
clf = GMM(n_components=len(train_targets), covariance_type=covar_type, init_params='wc', n_iter=10000)
print "VBGMM: full covariance"
covar_type = 'full' # 'spherical', 'diag', 'tied', 'full'
clf = VBGMM(n_components=len(train_targets), covariance_type=covar_type, alpha=1.0, random_state=None, thresh=0.01, verbose=False, min_covar=None, n_iter=1000000, params='wc', init_params='wc')
print "Random Forest"
clf = RandomForestClassifier(n_estimators=400, criterion='entropy', n_jobs=2)
print "MultiNomial Logistic Regression"
clf = LogisticRegression(penalty='l2', dual=False, C=1.0, fit_intercept=True, intercept_scaling=1, tol=0.0001)
print "SVM: Gaussian Kernel, infty iterations"
clf = SVC(C=1.0, kernel='rbf', degree=3, gamma=3.0, coef0=1.0, shrinking=True,
probability=False, tol=0.001, cache_size=200, class_weight=None,
verbose=False, max_iter=-1, random_state=None)
vectorizer
对象的映射过程中出现了问题。因此,请开始创建X_train
并查看。 希望有所帮助