python实现逻辑回归三种⽅法,Python中机器学习的逻辑回归,
之,python,实现
PS. 逻辑回归算法原理,有很多优秀的帖⼦详细介绍过,这⾥不再赘述。
(或者后期有时间了再新写帖⼦专门记录原理)
⽬录
⼀、python逻辑回归简单案例
1. 加载相关库
# 基础函数库
import numpy as np
# 导⼊画图库
import matplotlib.pyplot as plt
import seaborn as sns
# 导⼊逻辑回归模型函数
from sklearn.linear_model import LogisticRegression
注:上边seaborn是python的⼀个强⼤的数据可视化库。
2. 构造数据和特征,并查看散点图
# 构造数据集
x_fearures = np.array([[-1, -2], [-2, -1], [-3, -2], [1, 3], [2, 1], [3, 2]])
print('数据:------')
print(x_fearures)
y_label = np.array([0, 0, 0, 1, 1, 1])
print('标签:------')
print(y_label)
# 查看数据散点图
plt.figure()
plt.scatter(x_fearures[:, 0], x_fearures[:, 1], c=y_label, s=50, cmap='viridis')
plt.title('Dataset')
plt.show()
输出结果和散点图如下:(从中可以看出我们构造了6个样本,每个样本2个特征,散点图对两个类数据分布也很明显)
3.训练逻辑回归模型,并查看参数
# 调⽤逻辑回归模型
lr_clf = LogisticRegression()
# ⽤逻辑回归模型拟合构造的数据集 (其拟合⽅程为 y = w0 + w1 * x1 + w2 * x2)
lr_clf = lr_clf.fit(x_fearures, y_label)
## 查看其对应模型的w1,w2
print('the weight of Logistic Regression:', f_)
## 查看其对应模型的w0
print('the intercept(w0) of Logistic Regression:', lr_clf.intercept_)
输出结果如下:
4.构造⼀条可视化决策边界,来区分两个类别的数据:
# 可视化决策边界
plt.figure()
plt.scatter(x_fearures[:,0],x_fearures[:,1], c=y_label, s=50, cmap='viridis')
plt.title('Dataset')
nx, ny = 200, 100
# 获取feature中x轴和y轴上最⼩最⼤值
x_min, x_max = plt.xlim() # 设定坐标范围
y_min, y_max = plt.ylim()
# np.linspace:创建等差数列,np.meshgrid:⽹格坐标矩阵
print(np.linspace(x_min, x_max, nx)) # 区间内创建200个等差数列的数
print(' ')
x_grid, y_grid = np.meshgrid(np.linspace(x_min, x_max, nx), np.linspace(y_min, y_max, ny)) print(x_grid)
print(y_grid)
# np.c_: 添加列
z_proba = lr_clf.predict_proba(np.c_[x_grid.ravel(), y_grid.ravel()])
z_proba = z_proba[:, 1].reshape(x_grid.shape)
print(z_proba)
# ur: 绘制轮廓
plt.show()
注:代码中具体主要是创建了在feature的范围内最⼤x和最⼩y值范围内的,xy坐标的等差数列值,然后初始化⽹格坐标矩阵,构造数据,通过训练好的模型,拟合出决策边界(下图蓝线)
5.尝试在数据中添加两个新样本
# 添加两颗新样本并可视化
plt.figure()
# new point 1
x_fearures_new1 = np.array([[0, -1]])
plt.scatter(x_fearures_new1[:,0],x_fearures_new1[:,1], s=50, cmap='viridis')
# 注:plt.annotate(): 主要是⽤于在图中添加标注
plt.annotate(s='New point 1',xy=(0,-1),xytext= (-2,0),color='blue',
arrowprops=dict(arrowstyle='-|>',connectionstyle='arc3',color='red'))
# new point 2
x_fearures_new2 = np.array([[1, 2]])
plt.scatter(x_fearures_new2[:,0],x_fearures_new2[:,1], s=50, cmap='viridis')
plt.annotate(s='New point 2',xy=(1,2),xytext=(-1.5,2.5),color='red',
arrowprops=dict(arrowstyle='-|>',connectionstyle='arc3',color='red'))
# 原训练样本
plt.scatter(x_fearures[:,0], x_fearures[:,1], c=y_label, s=50, cmap='viridis')
plt.title('Dataset')
# 上⾯可视化的决策边界
plt.show()
从上述代码可以看到,在坐标(0,-1)和(1,2)处,添加了两个新样本:
6.⽤模型预测两个新样本
# predict_proba 函数预测其概率
y_label_new1_predict_proba = lr_clf.predict_proba(x_fearures_new1)
y_label_new2_predict_proba = lr_clf.predict_proba(x_fearures_new2)
print('The New point 1 predict Probability of each class:\n',y_label_new1_predict_proba) print('The New point 2 predict Probability of each class:\n',y_label_new2_predict_proba) # 预测类别
y_label_new1_predict = lr_clf.predict(x_fearures_new1)
y_label_new2_predict = lr_clf.predict(x_fearures_new2)
print('The New point 1 predict class:\n',y_label_new1_predict)
print('The New point 2 predict class:\n',y_label_new2_predict)
最后,预测结果为: 第⼀个点为类别0,第⼆个点为类别1,代码输出如下:
The New point 1 predict Probability of each class:
[[0.69567724 0.30432276]]
The New point 2 predict Probability of each class:
[[0.11983936 0.88016064]]
The New point 1 predict class:
[0]
The New point 2 predict class:
[1]
⼆、python实现鸢尾花数据分析
1.数据集介绍
我们使⽤sklearn库的经典数据集iris鸢尾花数据集 -------> 该数据集⼀共包含5
个变量,其中
4
个特征变量,
1
个⽬标分类
变量。共有linspace函数python
150
个样本,⽬标变量为 花的类别 其都属于鸢尾属下的三个亚属,分别是⼭鸢尾(Iris-setosa)
,变⾊鸢
(Iris-versicolor)
和维吉尼亚鸢尾
(Iris-virginica)
。包含的三种鸢尾花的四个特征,分别是花萼长度
(cm)
、花萼宽度
(cm)
、花瓣长度
(cm)
、花瓣宽度
(cm)
,这些形态特征在过去被⽤来识别物种。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。