第一步:载入数据
#加载数据
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