单项式逻辑回归(成绩通过预测)

第一步:载入数据

#加载数据
import pandas as pd
import numpy as np
data = pd.read_csv('examdata.csv')
data.head()

运行结果:

第二步:原始数据绘图

#原始数据绘图
from matplotlib import pyplot as plt
fig1=plt.figure()
plt.scatter(data.loc[:,'Exam1'],data.loc[:,'Exam2'])
plt.title('Exam1-Exam2')
plt.xlabel('Exam1')
plt.ylabel('Exam2')
plt.show()

运行结果:

第三步:添加标签区分

#增加标签mask
mask = data.loc[:,'Pass'] == 1#如果右侧等于1
print(mask)
fig2=plt.figure()
passed = plt.scatter(data.loc[:,'Exam1'][mask],data.loc[:,'Exam2'][mask])
failed = plt.scatter(data.loc[:,'Exam1'][~mask],data.loc[:,'Exam2'][~mask])
plt.title('Exam1-Exam2')
plt.xlabel('Exam1')
plt.ylabel('Exam2')
plt.legend((passed,failed),('passed','failed'))
plt.show()

运行结果:

第四步:建模

评估结果:0.89         

系数:

[[0.20535491 0.2005838 ]]
[-25.05219314] 0.20535491217790372 0.20058380395469033
#定义  x y
X = data.drop(['Pass'],axis=1)
y = data.loc[:,'Pass']
x1 = data.loc[:,'Exam1']
x2 = data.loc[:,'Exam2']
X.head()
#模型
from sklearn.linear_model import LogisticRegression
LR = LogisticRegression()
LR.fit(X,y)
#预测
y_predict = LR.predict(X)
#计算评估系数
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,y_predict)
print(accuracy)
#系数
theta0 = LR.intercept_
theta1,theta2 = LR.coef_[0][0],LR.coef_[0][1]
print(LR.coef_)
print(theta0,theta1,theta2)

第五步:计算预测方程在图像中画线

#边界函数 theta0+theta1*x1+theta2*x2
x2_new = -(theta0+theta1*x1)/theta2
#绘图 
plt.figure(figsize=(10,5))
#原始数据散点 
passed = plt.scatter(data.loc[:,'Exam1'][mask],data.loc[:,'Exam2'][mask])
failed = plt.scatter(data.loc[:,'Exam1'][~mask],data.loc[:,'Exam2'][~mask])
plt.title('Exam1-Exam2')
plt.xlabel('Exam1')
plt.ylabel('Exam2')
plt.legend((passed,failed),('passed','failed'))
plt.plot(x1,x2_new)
plt.show()

运行结果:


 

总结(线性回归与逻辑回归区别):

1.线性回归是拟合函数,逻辑回归是预测函数 。

2.线性回归的参数计算方法是最小二乘法。

3.逻辑回归的参数计算方法是梯度下降。

总代码:

#加载数据
import pandas as pd
import numpy as np
data = pd.read_csv('examdata.csv')
data.head()
#加载数据
import pandas as pd
import numpy as np
data = pd.read_csv('examdata.csv')
data.head()
#增加标签mask
mask = data.loc[:,'Pass'] == 1#如果右侧等于1
print(mask)
#原始数据绘图
from matplotlib import pyplot as plt
fig1=plt.figure()
plt.scatter(data.loc[:,'Exam1'],data.loc[:,'Exam2'])
plt.title('Exam1-Exam2')
plt.xlabel('Exam1')
plt.ylabel('Exam2')
plt.show()
#原始数据绘图
from matplotlib import pyplot as plt
fig1=plt.figure()
plt.scatter(data.loc[:,'Exam1'],data.loc[:,'Exam2'])
plt.title('Exam1-Exam2')
plt.xlabel('Exam1')
plt.ylabel('Exam2')
plt.show()
fig2=plt.figure()
passed = plt.scatter(data.loc[:,'Exam1'][mask],data.loc[:,'Exam2'][mask])
failed = plt.scatter(data.loc[:,'Exam1'][~mask],data.loc[:,'Exam2'][~mask])
plt.title('Exam1-Exam2')
plt.xlabel('Exam1')
plt.ylabel('Exam2')
plt.legend((passed,failed),('passed','failed'))
plt.show()
#定义  x y
X = data.drop(['Pass'],axis=1)
y = data.loc[:,'Pass']
x1 = data.loc[:,'Exam1']
x2 = data.loc[:,'Exam2']
X.head()
#模型
from sklearn.linear_model import LogisticRegression
LR = LogisticRegression()
LR.fit(X,y)
#预测
y_predict = LR.predict(X)
#计算评估系数
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,y_predict)
print(accuracy)
#边界函数 theta0+theta1*x1+theta2*x2
x2_new = -(theta0+theta1*x1)/theta2
#绘图 
plt.figure(figsize=(10,5))
#原始数据散点 
passed = plt.scatter(data.loc[:,'Exam1'][mask],data.loc[:,'Exam2'][mask])
failed = plt.scatter(data.loc[:,'Exam1'][~mask],data.loc[:,'Exam2'][~mask])
plt.title('Exam1-Exam2')
plt.xlabel('Exam1')
plt.ylabel('Exam2')
plt.legend((passed,failed),('passed','failed'))
plt.plot(x1,x2_new)
plt.show()

数据集链接:

通过百度网盘分享的文件:examdata.csv
链接:https://pan.baidu.com/s/1Sw4cDmnj6DakM3hqX_o1lQ 
提取码:4005 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-chu_kuang-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值