如何提高Scikit python中逻辑回归的模型精度?

时间:2016-06-28 13:09:49

标签: python machine-learning scikit-learn regression logistic-regression

我试图用gre,gpa和rank等预测变量来预测admit变量。但是预测精度非常低(0.66)。数据集如下所示。 https://gist.github.com/abyalias/3de80ab7fb93dcecc565cee21bd9501a

请找到以下代码:

 In[73]: data.head(20)
 Out[73]: 

   admit  gre   gpa  rank_2  rank_3  rank_4
0      0  380  3.61     0.0     1.0     0.0
1      1  660  3.67     0.0     1.0     0.0
2      1  800  4.00     0.0     0.0     0.0
3      1  640  3.19     0.0     0.0     1.0
4      0  520  2.93     0.0     0.0     1.0
5      1  760  3.00     1.0     0.0     0.0
6      1  560  2.98     0.0     0.0     0.0

y = data['admit']
x = data[data.columns[1:]]

from sklearn.cross_validation import  train_test_split
xtrain,xtest,ytrain,ytest  = train_test_split(x,y,random_state=2)

ytrain=np.ravel(ytrain)

#modelling 
clf = LogisticRegression(penalty='l2')
clf.fit(xtrain,ytrain)
ypred_train = clf.predict(xtrain)
ypred_test = clf.predict(xtest)

In[38]: #checking the classification accuracy
accuracy_score(ytrain,ypred_train)
Out[38]: 0.70333333333333337
In[39]: accuracy_score(ytest,ypred_test)
Out[39]: 0.66000000000000003

In[78]: #confusion metrix...
from sklearn.metrics import confusion_matrix
confusion_matrix(ytest,ypred)

Out[78]: 
array([[62,  1],
       [33,  4]])

那些是错误的预测。如何提高模型的准确性?

1 个答案:

答案 0 :(得分:47)

由于机器学习更多的是试验功能和模型,因此您的问题没有正确答案。我给你的一些建议是:

<强> 1。功能扩展和/或规范化 - 检查 gre gpa 功能的比例。它们的差异在2个数量级上。因此,您的 gre 功能最终会在Logistic回归等分类器中占据主导地位。您可以将所有功能标准化为相同的比例,然后再将它们放入机器学习模型中。This是scikit-learn中各种功能扩展和规范化类的良好指南。

<强> 2。类不平衡 - 查找数据中的类不平衡。由于您正在处理允许/拒绝数据,因此拒绝的数量将显着高于许可。 SkLearn中的大多数分类器(包括LogisticRegression)都有class_weight个参数。如果类不平衡,将其设置为balanced也可能效果很好。

第3。优化其他分数 - 您还可以优化其他指标,例如 Log Loss F1-Score 。在课堂不平衡的情况下,F1-Score可能很有用。 This是一个很好的指南,可以更多地谈论得分。

<强> 4。超参数调整 - 网格搜索 - 您可以通过执行网格搜索来调整模型的超参数来提高准确性。例如,对于LogisticRegression,参数C是超参数。此外,您应该避免在网格搜索期间使用测试数据。而是执行交叉验证。仅使用您的测试数据报告最终模型的最终数字。请注意,GridSearch应该针对您尝试的所有型号进行,因为只有您才能知道每种型号可以获得的最佳效果。 Scikit-Learn为此提供GridSearchCV类。 This文章也是一个很好的起点。

<强> 5。探索更多分类器 - Logistic回归学习一个分离您的类的线性决策表面。您的2个类可能无法线性分离。在这种情况下,您可能需要查看其他分类器,例如Support Vector Machines,这些分类器能够学习更复杂的决策边界。您还可以开始查看基于树的分类器,例如Decision Trees,它可以从您的数据中学习规则。将它们视为一系列If-Else规则,算法会自动从数据中学习。通常,使用决策树很难获得正确的Bias-Variance Tradeoff,因此如果您有大量数据,我建议您查看Random Forests

<强> 6。错误分析 - 对于每个模型,请返回并查看失败的情况。您最终可能会发现某些模型在参数空间的某个部分上运行良好,而其他模型在其他部分上运行得更好。如果是这种情况,那么Ensemble TechniquesVotingClassifier技术通常可以提供最佳效果。赢得Kaggle比赛的模特很多次是合奏模特。

<强> 7。更多功能 _如果所有这些都失败了,那么这意味着您应该开始寻找更多功能。

希望有所帮助!