如何提高Scikit-python中logistic回归的模型精度?

2024-05-15 21:35:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用gre、gpa和秩等预测因子来预测录取变量,但预测精度很低(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]])

预测错误,如何提高模型精度?


Tags: intestdatatrainoutclfgparank
1条回答
网友
1楼 · 发布于 2024-05-15 21:35:50

因为机器学习更多的是关于特性和模型的实验,所以你的问题没有正确的答案。我对你的一些建议是:

1。功能缩放和/或标准化-检查gregpa功能的缩放。它们相差两个数量级。因此,您的gre特性最终将在Logistic回归这样的分类器中支配其他特性。在将所有功能放入机器学习模型之前,您可以将其规格化为相同的比例。This是有关scikit learn中提供的各种功能缩放和规格化类的良好指南。

2。类不平衡-在数据中查找类不平衡。因为您使用的是允许/拒绝数据,那么拒绝的数量将显著高于允许的数量。SkLearn中的大多数分类器(包括^{})都有一个class_weight参数。在类不平衡的情况下,将其设置为balanced也可以很好地工作。

3。优化其他分数-您也可以在其他指标上进行优化,例如对数损失F1分数。在班级不平衡的情况下,F1的分数可能是有用的。This是一个很好的指南,可以更详细地讨论评分。

4。超参数调整-网格搜索-通过执行网格搜索来调整模型的超参数,可以提高精度。例如,在LogisticRegression的情况下,参数C是一个超参数。另外,您应该避免在网格搜索期间使用测试数据。而是执行交叉验证。只使用测试数据报告最终模型的最终编号。请注意,GridSearch应该对您尝试的所有模型都进行,因为只有这样,您才能知道从每个模型中可以获得的最佳结果。Scikit Learn为此提供了^{}类。This文章也是一个很好的起点。

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

6个。错误分析-对于每个模型,请返回并查看它们失败的情况。您可能会发现,某些模型在参数空间的某一部分工作得很好,而其他模型在其他部分工作得更好。如果是这样,那么像^{}这样的Ensemble Techniques技术通常会给出最好的结果。赢得Kaggle竞赛的模型是许多次集成模型。

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

希望能有帮助!

相关问题 更多 >