【问题标题】:RandomForestClassifier implemented in Python does not work用 Python 实现的 RandomForestClassifier 不起作用
【发布时间】:2018-10-01 20:18:00
【问题描述】:

我有这个 csv 文件:

name,likes,trabels,rapn,aps,class
0,name1,22,0.3,0.893818566,2,0
1,name2,2,0.3,0.910212895,2,0
2,zendym.,6,1,0.195939375,1,0
3,smok,16,0.3,0.56267631,2,0
4,d,3,0.3,0.01069298,1,0

我想根据名称的其余属性对名称进行分类。我正在使用此代码:

import pandas as pd 
from sklearn import datasets

df=pd.read_csv('book4.csv')

from sklearn.model_selection import train_test_split

X=df[['likes', 'trables', 'rapn', 'aps']]
y=df['class']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.7)

from sklearn.ensemble import RandomForestClassifier

clf=RandomForestClassifier()

clf.fit(X_train,y_train)

y_pred=clf.predict(X_test)

from sklearn import metrics

print("Accuracy:",metrics.accuracy_score(y_test, y_pred))

这是我的第一个机器学习程序。问题是当我运行它时,我得到[0 0 0 ..., 0 0 0]Accuracy=1(!!!!!!)。此外,当我检查每个功能的重要性时,我也会得到0.0。我无法理解我做错了什么。有人可以帮助我吗?

【问题讨论】:

  • 你有一个不平衡的类问题。所有的类都只映射到0
  • 提供的示例是整个数据集吗?它不包含class1 的任何行
  • 不,这是数据集的一部分。但是对于整个数据集,class0
  • @mad_ 我明白了。我应该映射类。问题是我希望算法找到类 - 在这种情况下,我是否使用了错误的技术?
  • 在进行预测之前,您实际上是在允许您的算法从类中学习。如果它只包含0 类,则意味着它没有看到任何其他类类型。因此,无论情况如何,它总是会预测结果有利于0。如果有意义的话,你实际上是在诱导数据集中的偏差。

标签: python machine-learning random-forest


【解决方案1】:

第一件事是,如果这个数据集就是你所拥有的,那么它对于实现随机森林分类器(数据饥渴)甚至任何机器学习都太小了。接下来,你有一个极度不平衡的类问题,“机器”不知道除了0之外还有没有其他class。这就是为什么所有预测都是零的原因。

【讨论】:

    猜你喜欢
    • 2020-03-31
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    相关资源
    最近更新 更多