如何提高Scikit Python中逻辑回归模型的准确性?

我正在尝试使用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. 特征缩放和/或归一化 – 检查你的gregpa特征的尺度。它们在数量级上相差两个数量级。因此,在像逻辑回归这样的分类器中,你的gre特征将最终主导其他特征。你可以在将它们放入机器学习模型之前,将所有特征归一化到相同的尺度。是一个关于scikit-learn中可用的各种特征缩放和归一化类的好指南。

2. 类别不平衡 – 查看你的数据中的类别不平衡情况。由于你正在处理录取/拒绝数据,那么拒绝的数量会显著高于录取的数量。SkLearn中的大多数分类器,包括LogisticRegression,都有一个class_weight 参数。将其设置为balanced在类别不平衡的情况下可能也会起作用。

3. 优化其他评分 – 你还可以优化其他指标,例如对数损失F1分数。在类别不平衡的情况下,F1分数可能很有用。是一个关于评分的更多信息的好指南。

4. 超参数调整 – 网格搜索 – 通过执行网格搜索来调整模型的超参数,你可以提高你的准确性。例如,在LogisticRegression的情况下,参数C是一个超参数。此外,你应该避免在网格搜索期间使用测试数据。相反,执行交叉验证。仅使用测试数据来报告最终模型的最终数字。请注意,网格搜索应该对你尝试的所有模型进行,因为只有这样你才能知道从每个模型中可以获得的最佳结果。Scikit-Learn提供了GridSearchCV类用于此。篇文章也是一个很好的起点。

5. 探索更多分类器 – 逻辑回归学习一个线性决策面来分隔你的类别。你的两个类别可能不是线性可分的。在这种情况下,你可能需要查看其他分类器,如支持向量机,它们能够学习更复杂的决策边界。你也可以开始查看基于树的分类器,如决策树,它们可以从你的数据中学习规则。把它们想象成一系列的如果-否则规则,这些规则是由算法从数据中自动学习的。通常情况下,使用决策树很难获得正确的偏差-方差折衷,所以我建议你如果有相当多的数据,可以查看随机森林

6. 错误分析 – 对于你的每个模型,返回并查看它们失败的情况。你可能会发现你的某些模型在一个参数空间部分表现良好,而其他模型在其他部分表现更好。如果是这种情况,那么集成技术VotingClassifier技术通常会给出最佳结果。赢得Kaggle比赛的模型很多时候都是集成模型。

7. 更多特征 – 如果所有这些都失败了,那么这意味着你应该开始寻找更多特征。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注