机器学习逻辑回归

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一,逻辑回归Demo

逻辑回归本质上还是属于线性分类器,以二维平面角度看就是一条将不同类型的点集一分为二的直线。下面我们创建简单数据和利用sklearn提供的LogisticRegression类实现一个简要的逻辑回归过程:

1.1 数据准备

必要库导入

##  基础函数库
import numpy as np 

## 导入画图库
import matplotlib.pyplot as plt
import seaborn as sns

## 导入逻辑回归模型函数
from sklearn.linear_model import LogisticRegression

数据创建与可视化

## 构造数据集
X = np.array([[-1, -2], [-2, -1], [-3, -2], [1, 3], [2, 1], [3, 2]])
y = np.array([0, 0, 0, 1, 1, 1])

## 可视化构造的数据样本点
fig = plt.figure(figsize=(6,5))
plt.scatter(X[:,0],X[:,1], c=y, s=50, cmap='viridis')
plt.title('Dataset')
plt.show()

在这里插入图片描述

1.2 创建逻辑回归分类器

逻辑回归分类器创建与拟合数据点(可视化分类器决策边界)

# 创建分类器
lr = LogisticRegression()
lr.fit(X,y)  # 拟合数据点

##查看其对应模型的w
print('the weight(w) of Logistic Regression:',lr.coef_)
##查看其对应模型的w0
print('the intercept(w0) of Logistic Regression:',lr.intercept_)

# 可视化决策边界
plt.figure()
plt.scatter(X[:,0],X[:,1], c=y, s=50, cmap='viridis')
plt.title('Dataset')

nx, ny = 200, 100   # 指定点个数
x_min, x_max = plt.xlim()  # x轴的边界
y_min, y_max = plt.ylim()  # y轴的边界

x_grid, y_grid = np.meshgrid(np.linspace(x_min, x_max, nx),np.linspace(y_min, y_max, ny))   # 得到所有可能坐标点组合,以linespace生成的数据点

# ravel()将n*m的数组转换为(n*m,1),np.c_([],[])按行连接两个矩阵,
z_proba = lr.predict_proba(np.c_[x_grid.ravel(), y_grid.ravel()])   # 由此得到所有可能坐标点输入后的概率值, z_proba:(20000,2)
z_proba = z_proba[:, 1].reshape(x_grid.shape)

plt.contour(x_grid, y_grid, z_proba, 1, linewidths=2., colors='blue')  # 绘制等高线,找到所有经过逻辑回归后值相同的点,取中间的等高线

plt.show()

在这里插入图片描述
在这里插入图片描述

1.3 分类器预测

分类器对新数据点预测
取新预测点(0,-1),(1,2)用分类器进行预测其分类概率

# 新的预测点
x_fearures_new1 = np.array([[0, -1]])
x_fearures_new2 = np.array([[1, 2]])

# 预测分类
y_label_new1_predict=lr.predict(x_fearures_new1)
y_label_new2_predict=lr.predict(x_fearures_new2)
print('The New point 1 predict class:\n',y_label_new1_predict)  # [0]
print('The New point 2 predict class:\n',y_label_new2_predict)  # 

# 预测分类概率
y_label_new1_predict_proba=lr.predict_proba(x_fearures_new1)
y_label_new2_predict_proba=lr.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)

在这里插入图片描述

逻辑回归实战

将逻辑回归分类器应用到实际问题中,实际上就是将上面Demo中特征向量和标签替换成真实数据中的结果。总的过程实际上与Demo类似,只不过添加了评估
在这里插入图片描述
在这里插入图片描述

from sklearn.datasets import load_iris
import pandas as pd

iris = load_iris() #得到数据特征,包含data,target,feature_names, target_names,DESCR等信息
df_X = pd.DataFrame(data=iris.data, columns=iris.feature_names)
y = iris.target
df_X.describe()
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
X_train,X_test,y_train,y_test = train_test_split(df_X,y, test_size=0.2, random_state=20200816)

lr = LogisticRegression()
lr.fit(X_train,y_train)

##查看其对应的w,3分类包含三个逻辑回归的参数
print('the weight(w) of Logistic Regression:\n',lr.coef_)
##查看其对应的w0
print('the intercept(w0) of Logistic Regression:\n',lr.intercept_)
from sklearn import metrics
# 预测
y_train_pred=lr.predict(X_train)
y_test_pred=lr.predict(X_test)

##利用accuracy(准确度)【预测正确的样本数目占总预测样本数目的比例】评估模型效果
print('The accuracy on train set is:',metrics.accuracy_score(y_train,y_train_pred))
print('The accuracy on test set is:',metrics.accuracy_score(y_test,y_test_pred))

# 绘制混淆矩阵
confusion_matrix_result=metrics.confusion_matrix(y_test,y_test_pred)
print('The confusion matrix result:\n',confusion_matrix_result)

##利用热力图对于结果进行可视化
plt.figure(figsize=(8,6))
sns.heatmap(confusion_matrix_result,annot=True,cmap='Blues')
plt.xlabel('Predicted labels')
plt.ylabel('True labels')
plt.show()

参考资料

https://blog.csdn.net/GentleCP/article/details/108035696

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值