python 逻辑回归准确率是1_python数据分析(三)——逻辑回归之学生成绩预测

本文利用Python进行学生成绩预测,通过阿里云天池的数据集,运用逻辑回归模型进行分析。数据预处理后,发现无缺失值,通过可视化探索特征与成绩的关系,发现某些特征如'raisedhands'、'VisitedResources'和'AnnouncementsView'有较高相关性。初始模型的准确率为1,优化模型后去除'SectionID',准确率有所提升。
摘要由CSDN通过智能技术生成

0cf2cd634cd7e370132ce22efd87da24.png

Python数据分析项目

——学生成绩预测

一.数据源

阿里云天池公开数据集:学生成绩预测数据集

https://tianchi.aliyun.com/dataset/dataDetail?dataId=6785

特征(Features)介绍:

  • Gender: 性别
  • Nationality: 国籍
  • PlaceofBirth:出生地
  • StageID:学校级别(小学,中学,高中)
  • GradeID:年级 (G01 - G12)
  • SectionID: 班级
  • Topic:学科科目
  • Semester: 学期 (春学期,秋学期)
  • Relation: 孩子家庭教育负责人(父亲,母亲)
  • RaisedHands: 学生该学期上课举手的次数
  • VisitedResources: 学生浏览在线课件的次数
  • AnnoucementsView: 学生浏览学校公告的次数
  • Discussion: 学生参与课堂讨论的次数
  • ParentAnsweringSurvey: 家长是否填写了关于学校的问卷调查 (是,否)
  • ParentSchoolSatisfaction: 家长对于学校的满意度 (好,不好)
  • StudentAbsenceDays: 学生缺勤天数 (大于7天,低于7天)

结果(Response Variable)介绍:

  • Class: 根据学生最后的学术评测分数,学生会被分为3个等级
  • Low-Level: 分数区间在0-60
  • Middle-Level:分数区间在70-89
  • High-Level:分数区间在90-100

二.数据预览

import pandas as pd

df=pd.read_csv('datalab/6785/students_data.csv')

df.head()

读了前五行,看看数据情况

2133ccefc0202194580c42b5f944f320.png

三.数据预处理

看看数据是否有缺失值

df.isnull().sum()

2d4f0140ec2cec30b4f7601a52c0fa33.png

没有缺失值

四.描述性统计

df.describe(include='all')

daf6b1014e728f1f108f657ac8eac2d4.png

看看类别变量包含的内容:

print('gender',df.gender.unique())

1c0f8741a5c0433db115684d1ca7fc13.png

看看数据集结果是否平衡:

import seaborn as sns

sns.countplot(x='Class',data=df)

0ed775505801f91a918e9e046c44dc7e.png

五.可视化

可视化的目的是为了探索数据规律,发现数据之间的关系,比如特征与目标变量之间的相关性。

可视化可以使用seaborn和matplotlib库进行,不过我不喜欢编程,所有比较喜欢用tableau,类别变量的可视化结果为tableau做的效果。

首先看看类别变量:

性别与得分:

7cd2dd92899f61719cd512d9ee974b28.png

国籍与得分:

c98003e2e5cfb0d2c53b8d0cc9b00d71.png

班级与得分:

1aa9f7e646cfaf91bde857e336a996c2.png

数值型变量:

相关性分析:

corr=df[['raisedhands','VisITedResources','AnnouncementsView','Discussion']].corr()

corr

4a85450624ef1dcf4791d0b4da1363ae.png

Discussion与其他三个相关性较低,其他三个变量的相关性都比较高

以上结论从热力图也可以看出来:

sns.heatmap(corr, xticklabels=corr.columns,yticklabels=corr.columns)

dafdc948afd3b130944568405c5d33c6.png

六.模型建立

使用逻辑回归模型进行预测,并计算准确率

from sklearn.model_selection import train_test_split

from sklearn.linear_model import LogisticRegression

from sklearn.metrics import accuracy_score

#建立特征和目标变量

x=df.drop('Class',axis=1)

x= pd.get_dummies(x)#对类别变量进行one-hot编码,即建立虚拟变量

y=df['Class']

x_train,x_test,y_train,y_test=train_test_split(x,y,test_size = 0.2,random_state = 10)#建立训练集和测试集

#模型训练

logit=LogisticRegression()

logit.fit(x_train,y_train)

#预测

predict=logit.predict(x_test)

print('predict',predict)

#准确率评分

Score = accuracy_score(y_test, predict)

Score

0d1a2a210fe9cfe9976431dc3520fe8c.png

七.模型优化

从可视化图表探索发现SectionID与Class关系不大,所以尝试剔除再进行建模:

x=df.drop(['Class','SectionID'],axis=1)

x= pd.get_dummies(x)

y=df['Class']

x_train,x_test,y_train,y_test=train_test_split(x,y,test_size = 0.2,random_state = 10)

logit=LogisticRegression()

logit.fit(x_train,y_train)

predict=logit.predict(x_test)

print('predict',predict)

Score = accuracy_score(y_test, predict)

Score

5d3af2f09615c9be5b6cd78dfb0576b5.png

可以看到准确率得到提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值