【发布时间】:2016-10-30 20:07:57
【问题描述】:
我正在尝试使用 gre、gpa 和ranks 等预测变量来预测承认变量。但预测准确度非常低(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]])
那些是错误的预测。如何提高模型的准确性?
【问题讨论】:
-
您可以从调整逻辑回归的 C 参数开始。您还可以尝试不同的分类方法,例如 SVM 和树。
-
您不应该尝试优化测试集的准确性。您应该优化训练集并将测试集用作方法的对象评估。您可以根据训练集编辑答案以显示准确度分数吗?
-
嗨,添加了基于训练集的准确度。
-
@geompalik,我试过把C=0.01,100。当100时,训练集的准确率提高到72.66%,测试集的准确率是68.99%。但仍然没有显着差异跨度>
-
两点:(i) 如上面的 ncfirth 所示,在训练集上评估模型通常是一种不好的做法,因为模型适合训练数据,而这样的分数不会说明它的任何信息概括能力。您应该选择交叉验证。 (ii) 我同意以下 Abhinav 的观点。我建议尝试规范化你的 gre 和 gpa,因为它们的值支配你的特征向量。例如:scikit-learn.org/stable/modules/generated/…
标签: python machine-learning scikit-learn regression logistic-regression