【发布时间】: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。 -
提供的示例是整个数据集吗?它不包含
class为1的任何行 -
不,这是数据集的一部分。但是对于整个数据集,
class是0。 -
@mad_ 我明白了。我应该映射类。问题是我希望算法找到类 - 在这种情况下,我是否使用了错误的技术?
-
在进行预测之前,您实际上是在允许您的算法从类中学习。如果它只包含
0类,则意味着它没有看到任何其他类类型。因此,无论情况如何,它总是会预测结果有利于0。如果有意义的话,你实际上是在诱导数据集中的偏差。
标签: python machine-learning random-forest