【发布时间】:2017-03-26 21:08:23
【问题描述】:
我正在使用 Python 的 sklearn + xgboost 模块解决分类问题。我有一个高度不平衡的数据,大约 92% 的 0 类和只有 8% 的 1 类。火车数据集可以在这里下载。 http://www.filedropper.com/kangarootrain
我不能在这个数据集中使用 numclaims 和 claimcst0 变量。 该数据集中的变量是: id,claimcst0,veh_value,exposure,veh_body,veh_age,gender,area,agecat,clm,numclaims
gender、area 和 agecat 是分类变量,其余是连续变量。 Id 是该记录的 ID。
前 10 条记录是
id,claimcst0,veh_value,exposure,veh_body,veh_age,gender,area,agecat,clm,numclaims
1,0,6.43,0.241897754,STNWG,1,M,A,3,0,0
2,0,4.46,0.856522757,STNWG,1,M,A,3,0,0
3,0,1.7,0.417516596,HBACK,1,M,A,4,0,0
4,0,0.48,0.626974524,SEDAN,4,F,A,6,0,0
5,0,1.96,0.089770031,HBACK,1,F,A,2,0,0
6,0,1.78,0.25654335,HBACK,2,M,A,3,0,0
7,0,2.7,0.688128611,UTE,2,M,A,1,0,0
8,0,0.94,0.912765859,STNWG,4,M,A,2,0,0
9,0,1.98,0.157753423,SEDAN,2,M,A,4,0,0
我尝试了几种方法来预测我的目标变量“clm”。我试过 knn、RF、svm、nb。我什至尝试对数据进行二次抽样。但无论我做什么都不会使预测更好。通过树木/增强,我得到了大约 93% 的准确率,但这仅仅是因为我正确地预测了所有的 0。
模型也错误地将所有 1 预测为 0。
任何帮助都会非常有帮助。这是我为 NB 尝试的基本代码。
from sklearn.naive_bayes import GaussianNB
clfnb = GaussianNB()
clfnb.fit(x_train, y_train)
pred = clfnb.predict(x_test)
#print set(pred)
from sklearn.metrics import accuracy_score, confusion_matrix
print accuracy_score(y_test, pred)
print confusion_matrix(y_test, pred)
0.92816091954
[[8398 0]
[ 650 0]]
【问题讨论】:
-
This community 可能更适合您的问题。这实际上与实现无关,而是算法、参数和技术的选择。
-
好的。谢谢@Maurice
-
您可能想要添加有关数据集的特征和标签的更多详细信息 - 不要指望人们会从可疑来源下载数据集(无意冒犯)。
标签: python machine-learning scikit-learn