图解Python逻辑回归:调包实现+徒手实现

1、sklearn实现

from sklearn.linear_model import LogisticRegression
from sklearn.datasets.samples_generator import make_blobs
import numpy as np, matplotlib.pyplot as mp
from mpl_toolkits import mplot3d

# 创建数据
X, y = make_blobs(centers=[[2, 2, 2], [0, 0, 0]], random_state=3)

# 训练模型
model = LogisticRegression()
model.fit(X, y)

# 系数(coefficient)和截距
k = model.coef_[0]
b = model.intercept_[0]

# 可视化
fig = mp.figure()
ax = mplot3d.Axes3D(fig)  # 获取三维坐标轴
# 散点图
ax.scatter(X[:, 0], X[:, 1], X[:, 2], s=99, c=y)
# 决策边界
x1 = np.arange(X[:, 0].min()-1, X[:, 0].max()+1, 2)
x2 = np.arange(X[:, 1].min()-1, X[:, 1].max()+1, 2)
x1, x2 = np.meshgrid(x1, x2)
x3 = (b + k[0] * x1 + k[1] * x2) / - k[2]  # 边界函数
ax.plot_surface(x1, x2, x3, alpha=0.2, color='g')
mp.show()

2、徒手写一个!

import numpy as np, matplotlib.pyplot as mp
from sklearn.datasets import make_blobs

"""创建随机样本"""
X, Y = make_blobs(centers=2, cluster_std=5)

"""数据处理"""
X = np.insert(X, 0, 1, axis=1)  # 增加一列,用于矩阵相乘
Y = Y.reshape(-1, 1)

"""sigmoid函数"""
sigmoid = lambda x: 1 / (1 + np.exp(-x))

"""梯度上升"""
d = X.shape[1]  # 维数
theta = np.mat([[1]] * d)  # 初始化回归系数
for i in range(5999, 8999):
    alpha = 1 / i  # 步长(先大后小)
    h = sigmoid(X * theta)
    theta = theta + alpha * X.T * (Y - h)  # 最终梯度上升迭代公式

"""数据可视化"""
x1, x2 = X[:, 1], X[:, 2]
mp.axis([x1.min() + 1, x1.max() + 1, x2.min() + 1, x2.max(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值