我正在尝试使用gre、gpa和rank等预测变量来预测admit变量。但是预测准确性非常低(0.66)。数据集如下所示。
https://gist.github.com/abyalias/3de80ab7fb93dcecc565cee21bd9501a
数据集的前几行看起来像这样:
admit gre gpa rank_2 rank_3 rank_40 0 380 3.61 0.0 1.0 0.01 1 660 3.67 0.0 1.0 0.02 1 800 4.00 0.0 0.0 0.03 1 640 3.19 0.0 0.0 1.04 0 520 2.93 0.0 0.0 1.05 1 760 3.00 1.0 0.0 0.06 1 560 2.98 0.0 0.0 0.0
我的代码:
from sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import confusion_matrix, accuracy_scorey = data['admit']x = data[data.columns[1:]]xtrain, xtest, ytrain, ytest = train_test_split(x, y, random_state=2)#modelling clf = LogisticRegression(penalty='l2')clf.fit(xtrain, ytrain)ypred_train = clf.predict(xtrain)ypred_test = clf.predict(xtest)#checking the classification accuracyaccuracy_score(ytrain, ypred_train)# 0.70333333333333337accuracy_score(ytest, ypred_test)# 0.66000000000000003#confusion metrix...confusion_matrix(ytest, ypred)# array([[62, 1],# [33, 4]])
那些被错误预测的都是1。我该如何提高模型的准确性?
回答:
由于机器学习更多的是关于对特征和模型进行实验,因此对于你的问题并没有一个正确的答案。我的一些建议如下:
1. 特征缩放和/或归一化 – 检查你的gre和gpa特征的尺度。它们在数量级上相差两个数量级。因此,在像逻辑回归这样的分类器中,你的gre特征将最终主导其他特征。你可以在将它们放入机器学习模型之前,将所有特征归一化到相同的尺度。这是一个关于scikit-learn中可用的各种特征缩放和归一化类的好指南。
2. 类别不平衡 – 查看你的数据中的类别不平衡情况。由于你正在处理录取/拒绝数据,那么拒绝的数量会显著高于录取的数量。SkLearn中的大多数分类器,包括LogisticRegression
,都有一个class_weight
参数。将其设置为balanced
在类别不平衡的情况下可能也会起作用。
3. 优化其他评分 – 你还可以优化其他指标,例如对数损失和F1分数。在类别不平衡的情况下,F1分数可能很有用。这是一个关于评分的更多信息的好指南。
4. 超参数调整 – 网格搜索 – 通过执行网格搜索来调整模型的超参数,你可以提高你的准确性。例如,在LogisticRegression
的情况下,参数C
是一个超参数。此外,你应该避免在网格搜索期间使用测试数据。相反,执行交叉验证。仅使用测试数据来报告最终模型的最终数字。请注意,网格搜索应该对你尝试的所有模型进行,因为只有这样你才能知道从每个模型中可以获得的最佳结果。Scikit-Learn提供了GridSearchCV
类用于此。这篇文章也是一个很好的起点。
5. 探索更多分类器 – 逻辑回归学习一个线性决策面来分隔你的类别。你的两个类别可能不是线性可分的。在这种情况下,你可能需要查看其他分类器,如支持向量机,它们能够学习更复杂的决策边界。你也可以开始查看基于树的分类器,如决策树,它们可以从你的数据中学习规则。把它们想象成一系列的如果-否则规则,这些规则是由算法从数据中自动学习的。通常情况下,使用决策树很难获得正确的偏差-方差折衷,所以我建议你如果有相当多的数据,可以查看随机森林。
6. 错误分析 – 对于你的每个模型,返回并查看它们失败的情况。你可能会发现你的某些模型在一个参数空间部分表现良好,而其他模型在其他部分表现更好。如果是这种情况,那么集成技术如VotingClassifier
技术通常会给出最佳结果。赢得Kaggle比赛的模型很多时候都是集成模型。
7. 更多特征 – 如果所有这些都失败了,那么这意味着你应该开始寻找更多特征。