文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

机器学习实战:Python基于Logistic逻辑回归进行分类预测(一)

2023-09-26 06:46

关注

目录

1 前言

1.1 Logistic回归的介绍

逻辑回归(Logistic regression,简称LR)是一种经典的二分类算法,它将输入特征与一个sigmoid函数进行线性组合,从而预测输出标签的概率。该算法常被用于预测离散的二元结果,例如是/否、真/假等。

优点:

缺点:

1.2 Logistic回归的应用

Logistic回归广泛应用于许多领域,包括:

  1. 金融风险评估。银行和信用卡公司使用Logistic回归来评估借款人的信用风险,预测贷款违约的概率。

  2. 医学诊断。Logistic回归可以用于预测患者是否患有某种疾病或病情的严重程度。

  3. 市场分析。Logistic回归可以用于预测产品或服务的市场需求,并帮助企业做出更好的决策。

  4. 自然语言处理。Logistic回归可以用于文本分类,例如判断一段文本是否属于某个主题或情感极性。

  5. 图像处理。Logistic回归可以用于图像分类和目标检测,例如识别数字和字母。

总之,Logistic回归是一种灵活的算法,可以应用于许多不同的领域和问题,特别是在需要预测二元结果的场景中表现出色。

2 iris数据集数据处理

iris数据集共有150个样本,目标变量为花的类别其都属于鸢尾属下的三个亚属(target),分别是山鸢尾 (Iris-setosa),变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica)。

四个特征,分别是花萼长度(sepal length)、花萼宽度(sepal width)、花瓣长度(petal length)、花瓣宽度(petal width)。

2.1 导入函数

import numpy as np import pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns

2.2 导入数据

from sklearn.datasets import load_irisdata = load_iris() iris_target = data.target iris_features = pd.DataFrame(data=data.data, columns=data.feature_names) #利用Pandas转化为DataFrame格式

2.3 简单数据查看

## 查看数据的整体信息iris_features.info()## 查看每个类别数量pd.Series(iris_target).value_counts()

## 查看head或tailiris_features.head()#iris_features.tail()

## 对于特征进行一些统计描述iris_features.describe()

3 可视化

3.1 条形图/散点图

## 合并标签和特征信息iris_all = iris_features.copy() ##进行浅拷贝,防止对于原始数据的修改iris_all['target'] = iris_target## 可视化sns.pairplot(data=iris_all,diag_kind='hist', hue= 'target')plt.show()

从结果可以发现,在2D情况下不同的特征组合对于不同类别的花的散点分布,以及大概的区分能力。

3.2 箱线图

## 构建画布2x2import matplotlib.pyplot as pltfig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 8))## 可视化for i, col in enumerate(iris_features.columns):    sns.boxplot(ax=axes[i//2, i%2], x='target', y=col, saturation=0.5, palette='pastel', data=iris_all)    axes[i//2, i%2].set_title(col)plt.tight_layout()plt.show()

3.3 三维散点图

from mpl_toolkits.mplot3d import Axes3Dfig = plt.figure(figsize=(10,8))ax = fig.add_subplot(111, projection='3d')iris_all_class0 = iris_all[iris_all['target']==0].valuesiris_all_class1 = iris_all[iris_all['target']==1].valuesiris_all_class2 = iris_all[iris_all['target']==2].values# 'setosa'(0), 'versicolor'(1), 'virginica'(2)ax.scatter(iris_all_class0[:,0], iris_all_class0[:,1], iris_all_class0[:,2],label='setosa')ax.scatter(iris_all_class1[:,0], iris_all_class1[:,1], iris_all_class1[:,2],label='versicolor')ax.scatter(iris_all_class2[:,0], iris_all_class2[:,1], iris_all_class2[:,2],label='virginica')plt.legend()plt.show()

4 建模预测

4.1 二分类预测

## 划分为训练集和测试集from sklearn.model_selection import train_test_split## 选择其类别为0和1的样本 (不包括类别为2的样本)iris_features_part = iris_features.iloc[:100]iris_target_part = iris_target[:100]## 训练集测试集7/3分x_train, x_test, y_train, y_test = train_test_split(iris_features_part, iris_target_part, test_size = 0.3, random_state = 2020)## 从sklearn中导入逻辑回归模型from sklearn.linear_model import LogisticRegressionclf = LogisticRegression(random_state=0, solver='lbfgs')# 训练模型clf.fit(x_train, y_train)
## 查看其对应的wprint('the weight of Logistic Regression:',clf.coef_)## 查看其对应的w0print('the intercept(w0) of Logistic Regression:',clf.intercept_)

## 预测模型train_predict = clf.predict(x_train)test_predict = clf.predict(x_test)
from sklearn import metrics## 利用accuracy(准确度)评估模型效果print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_train,train_predict))print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_test,test_predict))## 查看混淆矩阵 (预测值和真实值的各类情况统计矩阵)confusion_matrix_result = metrics.confusion_matrix(test_predict,y_test)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()

结果准确度为1,代表所有的样本都预测正确了,绝杀

4.2 多分类预测

## 训练集测试集还是7/3分x_train, x_test, y_train, y_test = train_test_split(iris_features, iris_target, test_size = 0.3, random_state = 2020)## 建模 clf = LogisticRegression(random_state=0, solver='lbfgs')## 训练模型clf.fit(x_train, y_train)

## 预测模型train_predict = clf.predict(x_train)test_predict = clf.predict(x_test)## p = p(y=1|x,\theta)),预测模型概率train_predict_proba = clf.predict_proba(x_train)test_predict_proba = clf.predict_proba(x_test)print('The test predict Probability of each class:\n',test_predict_proba)## 其中第一列代表预测为0类的概率,第二列代表预测为1类的概率,第三列代表预测为2类的概率。## 利用accuracy评估模型效果print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_train,train_predict))print('The accuracy of the Logistic Regression is:',metrics.accuracy_score(y_test,test_predict))

比起二分类的1略小,但均大于0.9

## 查看混淆矩阵confusion_matrix_result = metrics.confusion_matrix(test_predict,y_test)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()

根据结果发现,其在三分类的结果的预测准确度上有所下降,但好在测试集还有91%,这是由于versicolor(1)virginica(2)这两个类别的特征,我们从可视化的时候也可以发现,其特征的边界具有一定的模糊性(边界类别混杂,没有明显区分边界),所有在这两类的预测上出现了一定的错误。

5 讨论

Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别),所以利用了Logistic函数(或称为Sigmoid函数

原理的简单解释:当z=>0时, y=>0.5,分类为1,当z<0时, y<0.5,分类为0,其对应的y值我们可以视为类别1的概率预测值,而多分类其实就是将多个二分类的逻辑回归组合。

来源地址:https://blog.csdn.net/weixin_48093827/article/details/129986066

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯