机器学习:逻辑回归的简单实现

任务

根据数据集 建立逻辑回归模型,评估模型表现
预测Exam=75 Exam2=60的学生能否通过Exam3
建立二阶边界函数,重复任务1、2

数据集:

在这里插入图片描述

加载数据

# load the data
import pandas as pd
import numpy as np

data = pd.read_csv("D:\examdata.csv")
print(data.head())

在这里插入图片描述

可视化数据

# visvualize the data

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()

在这里插入图片描述

获取标签

# add label mask
mask = data.loc[:,'Pass']==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()

在这里插入图片描述

数据赋值

# dafine x,y
X = data.drop(["Pass"],axis=1)
y = data.loc[:,'Pass']
print(X.head())
print(y.head())
X1 = data.loc[:,"Exam1"]
X2 = data.loc[:,"Exam2"]

训练模型并预测结果

# extablish the model and train it
from sklearn.linear_model import LogisticRegression

LR = LogisticRegression()
LR.fit(X,y)

# show the predicted result
y_predict = LR.predict(X)
print(y_predict)

在这里插入图片描述

计算准确率

from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,y_predict)
print(accuracy)

在这里插入图片描述

预测Exam=75 Exam2=60的学生能否通过Exam3

y_test = LR.predict([[70,65]])
print(y_test)

在这里插入图片描述
可以通过

绘制决策边界的函数 <>0 + <>1X1 + <>2X2 = 0

# LR.coef_ = [theta1,theta2]
# LR.intercept_ = [theta0]

theta0 = LR.intercept_
theta1,theta2 = LR.coef_[0][0],LR.coef_[0][1]
print(theta1,theta1,theta2)

X2_new = -(theta0+theta1*X1)/theta2
print(X2_new)

fig3 = 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.plot(X1,X2_new) #画出决策边界
plt.title('Exam1-Exam2')
plt.xlabel('Exam1')
plt.ylabel('Exam2')
plt.legend((passed,failed),('passed','failed'))
plt.show()

在这里插入图片描述

建立二阶边界函数

在这里插入图片描述

# 建立二阶边界函数
# create new data
X1_2 = X1*X1
X2_2 = X2*X2
X1_X2 = X1*X2

X_new = {"X1":X1,"X2":X2,"X1_2":X1_2,"X2_2":X2_2,"X1_X2":X1_X2}
print(X_new)

X_new = pd.DataFrame(X_new)
print(X_new)

在这里插入图片描述

训练第二轮 创建新的模型

LR2 = LogisticRegression()
LR2.fit(X_new,y)

看看准确率

y2_predict = LR2.predict(X_new)

accuracy2 = accuracy_score(y,y2_predict)
print(accuracy2)

在这里插入图片描述

绘制

X1_new = X1.sort_values() #将x1_new从小到大排序
print(X1_new) #预览
#θo,θ1,θ2,θ3,θ4,θ5
theta0 = LR2.intercept_
theta1,theta2,theta3,theta4,theta5 = LR2.coef_[0][0],LR2.coef_[0][1],LR2.coef_[0][2],LR2.coef_[0][3],LR2.coef_[0][4]
a = theta4
b = theta5*X1_new+theta2
c = theta0+theta1*X1_new+theta3*X1_new*X1_new
x2_new_boundary = (-b+np.sqrt(b*b-4*a*c))/(2*a)
print(x2_new_boundary)

fig5 = 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.plot(X1_new,x2_new_boundary) #画出决策边界
plt.title('Exam1-Exam2')
plt.xlabel('Exam1')
plt.ylabel('Exam2')
plt.legend((passed,failed),('passed','failed'))
plt.show()

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

冲鸭嘟嘟可

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

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

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

打赏作者

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

抵扣说明:

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

余额充值