我是机器学习的初学者,我的第一个程序的结果有些难以理解。这是设置:
我有一组书籍评论数据。这些书籍可以用大约1600个限定词中的任意数量标记。评论这些书籍的人也可以用这些限定词来标记自己,以表示他们喜欢读具有该标记的内容。
该数据集有每个限定词的一列。对于每篇评论,如果给定的限定词用于标记书籍和评论者,则记录值1。如果在给定评论中不存在针对特定限定词的“匹配”,则记录值为0。
还有一个“分数”列,每个评论都有一个1-5的整数(该评论的“星级评分”)。我的目标是确定哪些特征最重要,以获得高得分。
这是我现在的代码 (https://gist.github.com/souldeux/99f71087c712c48e50b7):
def determine_feature_importance(df):
#Determines the importance of individual features within a dataframe
#Grab header for all feature values excluding score & ids
features_list = df.columns.values[4::]
print "Features List: \n", features_list
#set X equal to all feature values, excluding Score & ID fields
X = df.values[:,4::]
#set y equal to all Score values
y = df.values[:,0]
#fit a random forest with near-default paramaters to determine feature importance
print '\nCreating Random Forest Classifier...\n'
forest = RandomForestClassifier(oob_score=True, n_estimators=10000)
print '\nFitting Random Forest Classifier...\n'
forest.fit(X,y)
feature_importance = forest.feature_importances_
print feature_importance
#Make importances relative to maximum importance
print "\nMaximum feature importance is currently: ", feature_importance.max()
feature_importance = 100.0 * (feature_importance / feature_importance.max())
print "\nNormalized feature importance: \n", feature_importance
print "\nNormalized maximum feature importance: \n", feature_importance.max()
print "\nTo do: set fi_threshold == max?"
print "\nTesting: setting fi_threshhold == 1"
fi_threshold=1
#get indicies of all features over fi_threshold
important_idx = np.where(feature_importance > fi_threshold)[0]
print "\nRetrieved important_idx: ", important_idx
#create a list of all feature names above fi_threshold
important_features = features_list[important_idx]
print "\n", important_features.shape[0], "Important features(>", fi_threshold, "% of max importance:\n", important_features
#get sorted indices of important features
sorted_idx = np.argsort(feature_importance[important_idx])[::-1]
print "\nFeatures sorted by importance (DESC):\n", important_features[sorted_idx]
#generate plot
pos = np.arange(sorted_idx.shape[0]) + .5
plt.subplot(1,2,2)
plt.barh(pos,feature_importance[important_idx][sorted_idx[::-1]],align='center')
plt.yticks(pos, important_features[sorted_idx[::-1]])
plt.xlabel('Relative importance')
plt.ylabel('Variable importance')
plt.draw()
plt.show()
X = X[:, important_idx][:, sorted_idx]
return "Feature importance determined"
我已经成功生成了一张图,但我不太确定这张图的含义。据我所知,这张图展示了每个特征对分数变量产生的影响力大小。但是,我很困惑如何判断这种影响是正面的还是负面的。