逻辑回归 鸢尾花分类预测

news2024/9/22 17:24:21

目录

一:加载数据

二:数据集划分

三:选择算法

四:网格模型 超参数最优解

五:鸢尾花分类预测

六:预测与实际比对

七:完整源码分享


一:加载数据

from sklearn.datasets import load_iris  # 鸢尾花
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.linear_model import LogisticRegression  # 逻辑回归算法
import pandas as pd
import joblib

# 加载鸢尾花数据集
iris_data = load_iris()
X = iris_data.data
Y = iris_data.target
print(X, X.shape)

提取特征数据,结果如下

[[5.1 3.5 1.4 0.2]
 [4.9 3.  1.4 0.2]
 [4.7 3.2 1.3 0.2]
 [4.6 3.1 1.5 0.2]
 [5.  3.6 1.4 0.2]
 [5.4 3.9 1.7 0.4]
 [4.6 3.4 1.4 0.3]
 [5.  3.4 1.5 0.2]
 [4.4 2.9 1.4 0.2]
 [4.9 3.1 1.5 0.1]
 [5.4 3.7 1.5 0.2]
 [4.8 3.4 1.6 0.2]
 [4.8 3.  1.4 0.1]
 [4.3 3.  1.1 0.1]
 [5.8 4.  1.2 0.2]
 [5.7 4.4 1.5 0.4]
 [5.4 3.9 1.3 0.4]
 [5.1 3.5 1.4 0.3]
 [5.7 3.8 1.7 0.3]
 [5.1 3.8 1.5 0.3]
 [5.4 3.4 1.7 0.2]
 [5.1 3.7 1.5 0.4]
 [4.6 3.6 1.  0.2]
 [5.1 3.3 1.7 0.5]
 [4.8 3.4 1.9 0.2]
 [5.  3.  1.6 0.2]
 [5.  3.4 1.6 0.4]
 [5.2 3.5 1.5 0.2]
 [5.2 3.4 1.4 0.2]
 [4.7 3.2 1.6 0.2]
 [4.8 3.1 1.6 0.2]
 [5.4 3.4 1.5 0.4]
 [5.2 4.1 1.5 0.1]
 [5.5 4.2 1.4 0.2]
 [4.9 3.1 1.5 0.2]
 [5.  3.2 1.2 0.2]
 [5.5 3.5 1.3 0.2]
 [4.9 3.6 1.4 0.1]
 [4.4 3.  1.3 0.2]
 [5.1 3.4 1.5 0.2]
 [5.  3.5 1.3 0.3]
 [4.5 2.3 1.3 0.3]
 [4.4 3.2 1.3 0.2]
 [5.  3.5 1.6 0.6]
 [5.1 3.8 1.9 0.4]
 [4.8 3.  1.4 0.3]
 [5.1 3.8 1.6 0.2]
 [4.6 3.2 1.4 0.2]
 [5.3 3.7 1.5 0.2]
 [5.  3.3 1.4 0.2]
 [7.  3.2 4.7 1.4]
 [6.4 3.2 4.5 1.5]
 [6.9 3.1 4.9 1.5]
 [5.5 2.3 4.  1.3]
 [6.5 2.8 4.6 1.5]
 [5.7 2.8 4.5 1.3]
 [6.3 3.3 4.7 1.6]
 [4.9 2.4 3.3 1. ]
 [6.6 2.9 4.6 1.3]
 [5.2 2.7 3.9 1.4]
 [5.  2.  3.5 1. ]
 [5.9 3.  4.2 1.5]
 [6.  2.2 4.  1. ]
 [6.1 2.9 4.7 1.4]
 [5.6 2.9 3.6 1.3]
 [6.7 3.1 4.4 1.4]
 [5.6 3.  4.5 1.5]
 [5.8 2.7 4.1 1. ]
 [6.2 2.2 4.5 1.5]
 [5.6 2.5 3.9 1.1]
 [5.9 3.2 4.8 1.8]
 [6.1 2.8 4.  1.3]
 [6.3 2.5 4.9 1.5]
 [6.1 2.8 4.7 1.2]
 [6.4 2.9 4.3 1.3]
 [6.6 3.  4.4 1.4]
 [6.8 2.8 4.8 1.4]
 [6.7 3.  5.  1.7]
 [6.  2.9 4.5 1.5]
 [5.7 2.6 3.5 1. ]
 [5.5 2.4 3.8 1.1]
 [5.5 2.4 3.7 1. ]
 [5.8 2.7 3.9 1.2]
 [6.  2.7 5.1 1.6]
 [5.4 3.  4.5 1.5]
 [6.  3.4 4.5 1.6]
 [6.7 3.1 4.7 1.5]
 [6.3 2.3 4.4 1.3]
 [5.6 3.  4.1 1.3]
 [5.5 2.5 4.  1.3]
 [5.5 2.6 4.4 1.2]
 [6.1 3.  4.6 1.4]
 [5.8 2.6 4.  1.2]
 [5.  2.3 3.3 1. ]
 [5.6 2.7 4.2 1.3]
 [5.7 3.  4.2 1.2]
 [5.7 2.9 4.2 1.3]
 [6.2 2.9 4.3 1.3]
 [5.1 2.5 3.  1.1]
 [5.7 2.8 4.1 1.3]
 [6.3 3.3 6.  2.5]
 [5.8 2.7 5.1 1.9]
 [7.1 3.  5.9 2.1]
 [6.3 2.9 5.6 1.8]
 [6.5 3.  5.8 2.2]
 [7.6 3.  6.6 2.1]
 [4.9 2.5 4.5 1.7]
 [7.3 2.9 6.3 1.8]
 [6.7 2.5 5.8 1.8]
 [7.2 3.6 6.1 2.5]
 [6.5 3.2 5.1 2. ]
 [6.4 2.7 5.3 1.9]
 [6.8 3.  5.5 2.1]
 [5.7 2.5 5.  2. ]
 [5.8 2.8 5.1 2.4]
 [6.4 3.2 5.3 2.3]
 [6.5 3.  5.5 1.8]
 [7.7 3.8 6.7 2.2]
 [7.7 2.6 6.9 2.3]
 [6.  2.2 5.  1.5]
 [6.9 3.2 5.7 2.3]
 [5.6 2.8 4.9 2. ]
 [7.7 2.8 6.7 2. ]
 [6.3 2.7 4.9 1.8]
 [6.7 3.3 5.7 2.1]
 [7.2 3.2 6.  1.8]
 [6.2 2.8 4.8 1.8]
 [6.1 3.  4.9 1.8]
 [6.4 2.8 5.6 2.1]
 [7.2 3.  5.8 1.6]
 [7.4 2.8 6.1 1.9]
 [7.9 3.8 6.4 2. ]
 [6.4 2.8 5.6 2.2]
 [6.3 2.8 5.1 1.5]
 [6.1 2.6 5.6 1.4]
 [7.7 3.  6.1 2.3]
 [6.3 3.4 5.6 2.4]
 [6.4 3.1 5.5 1.8]
 [6.  3.  4.8 1.8]
 [6.9 3.1 5.4 2.1]
 [6.7 3.1 5.6 2.4]
 [6.9 3.1 5.1 2.3]
 [5.8 2.7 5.1 1.9]
 [6.8 3.2 5.9 2.3]
 [6.7 3.3 5.7 2.5]
 [6.7 3.  5.2 2.3]
 [6.3 2.5 5.  1.9]
 [6.5 3.  5.2 2. ]
 [6.2 3.4 5.4 2.3]
 [5.9 3.  5.1 1.8]] (150, 4)
print(Y, Y.shape)

 提取标签数据,结果如下 

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2] (150,)

二:数据集划分

# 数据划分
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=6)

数据集划分为训练集和测试集,划分比例设置,随机划分设置 

三:选择算法

# 选择一个算法
# multi_class:多分类参数是在 二分类基础上进行
# OVR:一对多 把多元的转为二分类 有几个点就分几次处理 4特征
# OVO:一对一 把多元的转为更多的二分类,求概率,然后进行比较,求出最大的概率(耗时较多)
# penalty="l2":损失函数  penalty : {'l1', 'l2', 'elasticnet', 'none'}, default='l2'
# class_weight:权重      class_weight : dict or 'balanced', default=None
# solver:   {'newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'}, \
#             default='lbfgs'
model = LogisticRegression()
param_list = [
    {
        'penalty': ['l1', 'l2'],
        'class_weight': [None, 'balanced'],
        'solver': ['newton-cg', 'lbfgs', 'liblinear'],
        'multi_class': ['ovr']
    },
    {
        'penalty': ['l1', 'l2'],
        'class_weight': [None, 'balanced'],
        'solver': ['newton-cg', 'lbfgs', 'sag'],
        'multi_class': ['multinomial']
    }
]

LogisticRegression重要参数

 multi_class:多分类参数是在 二分类基础上进行 auto ovr multinomial
 OVR:一对多 把多元的转为二分类 有几个点就分几次处理 4特征
 OVO:一对一 把多元的转为更多的二分类,求概率,然后进行比较,求出最大的概率(耗时较多)
 penalty="l2":正则化防止过拟合       l1  l2
 class_weight:权重      class_weight : dict or 'balanced', default=None
 solver:   {'newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'}, \
                default='lbfgs'      超参调优参数

四:网格模型 超参数最优解

# 网格算法
grid = GridSearchCV(model, param_grid=param_list, cv=10)
grid.fit(X_train, y_train)
print(grid.best_estimator_)
print(grid.best_params_)
print(grid.best_score_)

超参最优解,如下,可使用于模型预测 

LogisticRegression(multi_class='multinomial', solver='sag')
{'class_weight': None, 'multi_class': 'multinomial', 'penalty': 'l2', 'solver': 'sag'}
0.975

五:鸢尾花分类预测

# 预测模型
best_model = LogisticRegression(multi_class='multinomial', solver='sag')
best_model.fit(X_train, y_train)
y_predict = best_model.predict(X_test)
print(y_predict == y_test)

鸢尾花分类预测,结果如下,准确性较高 

[ True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True]

六:预测与实际比对

线性图 回归模型

import matplotlib.pyplot as plt

test_pre = pd.DataFrame({"test": y_test.tolist(),
                         "pre": y_predict.flatten()
                         })
test_pre.plot(figsize=(18, 10))
plt.show()

点状图 回归模型

import matplotlib.pyplot as plt

# 预测与实际
plt.scatter(y_test, y_predict, label="test")
plt.plot([y_test.min(), y_test.max()],
         [y_test.min(), y_test.max()],
         'k--',
         lw=3,
         label="predict"
         )
plt.show()

从上面两个图,得出,预测和实际比对的结果还是very good的 

七:完整源码分享

from sklearn.datasets import load_iris  # 鸢尾花
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.linear_model import LogisticRegression  # 逻辑回归算法
import matplotlib.pyplot as plt
import pandas as pd
import joblib

# 加载鸢尾花数据集
iris_data = load_iris()
X = iris_data.data
Y = iris_data.target
# print(X, X.shape)
# print(Y, Y.shape)

# 数据划分
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=6)

# 选择一个算法
# multi_class:多分类参数是在 二分类基础上进行
# OVR:一对多 把多元的转为二分类 有几个点就分几次处理 4特征
# OVO:一对一 把多元的转为更多的二分类,求概率,然后进行比较,求出最大的概率(耗时较多)
# penalty="l2":损失函数  penalty : {'l1', 'l2', 'elasticnet', 'none'}, default='l2'
# class_weight:权重      class_weight : dict or 'balanced', default=None
# solver:   {'newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'}, \
#             default='lbfgs'
model = LogisticRegression()
param_list = [
    {
        'penalty': ['l1', 'l2'],
        'class_weight': [None, 'balanced'],
        'solver': ['newton-cg', 'lbfgs', 'liblinear'],
        'multi_class': ['ovr']
    },
    {
        'penalty': ['l1', 'l2'],
        'class_weight': [None, 'balanced'],
        'solver': ['newton-cg', 'lbfgs', 'sag'],
        'multi_class': ['multinomial']
    }
]

# 网格算法
# grid = GridSearchCV(model, param_grid=param_list, cv=10)
# grid.fit(X_train, y_train)
# print(grid.best_estimator_)
# print(grid.best_params_)
# print(grid.best_score_)

# 预测模型
best_model = LogisticRegression(multi_class='multinomial', solver='sag')
best_model.fit(X_train, y_train)
y_predict = best_model.predict(X_test)
print(y_predict == y_test)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jenkins启动项目时报错问题

问题 在工作中使用jenkins进行项目部署启动时遇到问题,项目构建成功但是发布时一直显示时间增加,但是项目本身并没有问题,使用传统方法部署项目也能正常启动。报错如下图所示: 解决方法 是由于jenkins文件中打印日志的问题&am…

PayPal,Stripe,Square轮询支付系统

轮询展示 展示我们轮询的页面 轮询套餐 根据不同的用户和需求,可以选择不同的套餐 普通版 1500元 1年 1个用户 支持Paypal/Stripe 不限制A站个数 不限制B站个数 不限制提交模式 订单管理 物流管理 风控管理 必要的网站数据处理 24小时远程协助 开始…

springcloud服务消费与熔断

今天与大家分享服务消费与熔断,就是说当我们服务消费者转发到服务生产者时,如果有那一步出现了问题或者error,可以进行服务熔断(服务降级),为了补救系统问题,不让用户使用时看见error报错信息&a…

《Java》String、StringBuffer、StringBuilder有什么区别?

目录 String StringBuffer StringBuilder 总结 ps:昨天在讨论完String的不可变性之后突然想要做一份总结笔记,总结一下String、StringBuffer、StringBuilder的区别 String String是Java中的基础类,提供了各种构造和对字符串的基本操作&am…

Cocos Creater(3.6.1)开发笔记——Typscript

文章目录项目入门关于cocos creator 3.x关于TypeScript新建项目VS setting json配置屏蔽项事件节点添加脚本(事件)案例代码素材使用技巧素材组合固定布局(类似css)项目入门 关于cocos creator 3.x 相当于cocos所有版本的功能的综…

初探MapReduce

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录MapReduce核心思想MapReduce编程模型MapReduce编程实例——词频统计思路1、Map阶段(映射阶段)2、Reduce阶段(归并阶段&#xff09…

VS2019下C#调用C++ DLL详解+数据转换

VS2019下C#调用C DLL详解数据转换 -C#调用OpenCV(c的.dll主要有两种常见的方式:托管和非托管两种形式! 非托管的形式即是采用[DllImport]的形式,这种形式只能调用的C的函数,适合用于简单的图形处理调用,这也…

正交编码器溢出处理

文章目录1.正交编码器1.1 参数特性1.2 应用范围2.正交编码器使用2.1 溢出问题2.2 中断模式2.3 循环模式延伸1.正交编码器 正交编码器一般指的是增量式光栅(磁栅)编码器,通常有三路输出信号,A相、B相、Z相,俗称ABZ编码器…

【2022年度系列工作总结】「国内软件质量调查问卷」针对于本年度软件质量分析总结报告

前提背景 针对于目前的软件行业而言,软件的质量目前越来越被大家所在关注,慢慢的QA以及SQA的角色也变得愈加重要。接下来我就针对于我司(XXX)的相关的实际开发情况对应的【2022年国内软件质量调查问卷】,为大家梳理和…

[附源码]计算机毕业设计Python大学生考勤管理系统论文(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

听说Linux基础指令很多?这里都帮你总结好了

✨个人主页: Yohifo 🎉所属专栏: Linux学习之旅 🎊每篇一句: 图片来源 🎃操作环境: CentOS 7.6 阿里云远程服务器 You can’t use up creativity. The more you use, the more you have. 创造力…

微软数据科学家助理(Data Scientist Associate)认证考试通过经验分享(DP-100)

今天冒着大疫情,去海淀的test center参加考试,通过了微软DP-100 在 Azure 上设计和实现数据科学解决方案,并且获得了经 Microsoft 认证:Azure 数据科学家助理 的证书。 经 Microsoft 认证:Azure 数据科学家助理 考试结…

Hadoop编译源码

文章目录第一章 Hadoop编译源码1.1 前期准备工作1.2 Jar包安装配置maven的环境变量在 mirrors节点中添加阿里云镜像安装gcc make配置环境变量1.3编译源码第二章 常见错误及解决方案第一章 Hadoop编译源码 1.1 前期准备工作 1)CentOS联网 配置CentOS能连接外网。Li…

力扣(LeetCode)1703. 得到连续 K 个 1 的最少相邻交换次数(C++)

贪心 将至少连续 KKK 个 111 放在一起。首先考虑他们是相邻着放在一起的,然后考虑性质 : 设相邻摆放后,起始 111 的位置是 mid{mid}mid ,对于每个 111 的位置 aia_iai​ ,它需要被摆放的位置是 amidia_{mid}iamid​i 。考虑一个等…

【Effective_Objective-C_2对象,消息,运行期2】

文章目录前言12.理解消息转发机制消息转发动态方法解析动态方法解析的前提备援接受者完整的消息转发消息转发全部流程要点总结13.用“方法调配技术”调试“黑盒方法”方法调配动态消息派发系统和IMP如何交换方法实现要点总结14.理解“类对象”的用意在类的继承体系中查询类型信…

【经济学】【综合篇】经济机器是怎样运行的

原视频:经济机器是怎样运行的 (时长30分钟) Ray Dalio 前言:经济与我们每一个人息息相关,经济社会的一些变革或举措也会直接或间接的反映到我们每个个体身上。了解经济,提高自己的认知,可以帮助我们更好的参与经济活动…

excel数据统计技巧:如何对表格区域内所含字母进行计数

小王是一家快餐店的财务人员。受疫情影响公司开展了店外销售业务,所有销售采取手工记账的方式。为了简化销售人员的工作量,为每种商品指定了一个字母代码,营业员只需要记录每一单销售的商品代码即可。下面是根据手工记账登记的销售记录表&…

论文投稿指南——中国(中文EI)期刊推荐(第8期)

🎄🎄 EI是国际知名三大检索系统之一,在学术界的知名度和认可度仅次于SCI! 【前言】 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊。其中,中文期刊的…

【运筹优化】子集和问题(Subset Sum Problems , SSP)介绍 + 动态规划求解 + Java代码实现

文章目录一、问题介绍二、动态规划求解思路三、Java代码实现一、问题介绍 子集和问题(Subset Sum Problems , SSP),它是复杂性理论中最重要的问题之一。 SSP会给定一组整数 a1,a2,....,ana_1,a_2,....,a_na1​,a2​,....,an​ ,…

手写Spring7(实现bean的初始化、销毁)

文章目录目标设计流程项目结构一、实现1、 定义初始化和销毁方法的接口2、Bean属性定义新增初始化和销毁3、执行 Bean 对象的初始化方法4、定义销毁方法适配器(接口和配置)5、定义注册销毁对象、销毁实现6、创建Bean时注册销毁方法对象7、虚拟机关闭钩子注册调用销毁方法二、测…