机器学习之线性回归与逻辑回归【完整房价预测和鸢尾花分类代码解释】

目录

前言

一、什么是线性回归

二、什么是逻辑回归

三、基于Python 和 Scikit-learn 库实现线性回归

示例代码:

 使用线性回归来预测房价:

四、基于Python 和 Scikit-learn 库实现逻辑回归

五、总结 

线性回归的优缺点总结:

逻辑回归(Logistic Regression)是一种常用的分类算法,具有许多优点和缺点。


博主介绍:✌专注于前后端领域开发的优质创作者、秉着互联网精神开源贡献精神,答疑解惑、坚持优质作品共享。本人是掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战,深受全网粉丝喜爱与支持✌有需要可以联系作者我哦!

🍅文末三连哦🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

前言

机器学习的起源可以追溯到人工智能的发展历程。虽然人工智能的概念早在20世纪50年代就已经出现,但直到之后几十年里,随着计算机技术的不断发展和数据的日益增多,机器学习才逐渐成为人工智能领域的主流技术之一。

以下是机器学习发展的几个重要时期和里程碑

  1. 逻辑理论和符号学习: 20世纪50年代末到60年代初,人工智能研究主要集中在基于逻辑理论和符号推理的方法上。这一时期出现了逻辑推理、专家系统等符号学习方法,但受限于计算机技术和数据量的限制,这些方法的应用受到了很大的局限性。

  2. 连接主义和神经网络 20世纪80年代末到90年代初,随着计算机性能的提升和神经科学的研究进展,连接主义和神经网络等基于模拟生物神经系统的方法开始受到关注。这一时期出现了感知机、多层感知机等基础神经网络模型,但由于计算资源有限以及理论上的一些困难,神经网络的发展进展缓慢。

  3. 统计学习 20世纪90年代中期以后,随着统计学习方法的兴起,机器学习开始进入了快速发展的时期。统计学习方法将机器学习问题转化为统计推断问题,引入了概率论和统计学的理论基础,并在分类、回归、聚类等领域取得了很大成功。支持向量机、决策树、随机森林等经典机器学习算法相继出现。

  4. 深度学习: 21世纪初,随着大数据和计算资源的快速增长,深度学习成为了机器学习领域的新热点。深度学习利用多层神经网络模型来学习数据的高级表示,解决了传统神经网络中的一些问题,并在计算机视觉、自然语言处理等领域取得了突破性进展。

一、什么是性回归线

线性回归是一种用于建模输入变量与连续输出变量之间关系的线性方法。它假设输入变量与输出变量之间存在线性关系,即输出变量可以由输入变量的线性组合加上误差项得到。线性回归模型的基本形式可以表示为:

其中,y 是输出变量,x_1{},x_2{}...x_n{}是输入变量,\beta _0{},\beta _1{}...\beta _n{}是模型的参数(斜率和截距),\varepsilon是误差项。

线性回归的目标是找到最佳的模型参数,使得观测值与模型预测值之间的残差平方和最小化。常用的方法是最小二乘法,即通过最小化观测值与模型预测值之间的残差平方和来估计模型参数。

线性回归广泛应用于各种领域,例如经济学、统计学、工程学等,常用于预测和建模。在实践中,线性回归模型可以通过各种优化算法进行求解,例如梯度下降法、正规方程法等。

二、什么是逻辑回归

逻辑回归是一种用于建模输入变量与二元分类输出变量之间关系的线性方法。尽管名字中带有“回归”,但实际上逻辑回归是一种分类模型,而不是回归模型。逻辑回归通过使用逻辑函数(也称为sigmoid函数)将线性组合的结果转换为一个概率值,从而将连续的输出转化为二元的分类结果。

逻辑回归模型的基本形式可以表示为:

其中,P(y=1|x)是输出变量为1的概率,x_1, x_2, ..., x_n是输入变量,\beta_0, \beta_1, ..., \beta_n是模型的参数(斜率和截距)。

逻辑回归模型通常使用最大似然估计法来估计参数,目标是最大化观测值属于其真实类别的概率。在训练过程中,逻辑回归模型会输出一个介于0和1之间的概率值表示观测值属于某一类的概率。然后根据设定的阈值(通常为0.5),将概率值映射到二元分类结果。

逻辑回归模型常用于二元分类问题,例如预测患病与否、垃圾邮件分类等。它简单、高效,并且易于理解和实现,是许多机器学习算法中的基础模型之一。

三、基于Python 和 Scikit-learn 库实现线性回归

示例代码:

# 导入必要的库
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt# 生成一些示例数据
np.random.seed(0)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建线性回归模型
model = LinearRegression()# 在训练集上拟合模型
model.fit(X_train, y_train)# 在训练集和测试集上进行预测
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)# 计算训练集和测试集上的均方误差
train_mse = mean_squared_error(y_train, y_train_pred)
test_mse = mean_squared_error(y_test, y_test_pred)print("训练集上的均方误差:", train_mse)
print("测试集上的均方误差:", test_mse)# 可视化拟合结果
plt.scatter(X_test, y_test, color='black')
plt.plot(X_test, y_test_pred, color='blue', linewidth=3)
plt.xlabel('X')
plt.ylabel('y')
plt.title('Linear Regression')
plt.show()

执行结果:

 使用线性回归来预测房价:

我们首先加载了一个包含房屋面积和价格的数据集。然后,我们使用线性回归模型来拟合房价与房屋面积之间的关系。接下来,我们将数据分为训练集和测试集,并在训练集上训练模型。最后,我们使用测试集评估模型的性能,并可视化预测结果。

注:波士顿房价预测数据下载(点击即可挑战链接)

# 导入必要的库
import numpy as np
import pandas
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error# 读取数据集
data = pandas.read_csv('C:\\Users\\y\\Desktop\\ISCDS - 副本\\AI\\Imgs\img\\train.csv')# 可视化数据分布
plt.scatter(data['GrLivArea'], data['SalePrice'])
plt.xlabel('Area (sq.ft)')
plt.ylabel('Price ($)')
plt.title('House Prices vs. Area')
plt.show()# 准备数据
X = data['Area'].values.reshape(-1, 1)  # 输入特征:房屋面积
y = data['Price'].values  # 输出标签:房价# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建线性回归模型
model = LinearRegression()# 在训练集上拟合模型
model.fit(X_train, y_train)# 在测试集上进行预测
y_pred = model.predict(X_test)# 计算模型的均方误差
mse = mean_squared_error(y_test, y_pred)
print("模型的均方误差:", mse)# 可视化预测结果
plt.scatter(X_test, y_test, color='black')
plt.plot(X_test, y_pred, color='blue', linewidth=3)
plt.xlabel('Area (sq.ft)')
plt.ylabel('Price ($)')
plt.title('House Prices Prediction')
plt.show()

执行结果:

 房子面积与价格关系图 

四、基于Python 和 Scikit-learn 库实现逻辑回归

在这里,我将使用Scikit-learn库中的一个内置的数据集作为示例。你可以使用load_iris()函数来加载鸢尾花数据集。首先加载了鸢尾花数据集,并将其分为训练集和测试集。然后,我们创建了一个逻辑回归模型并在训练集上拟合了模型。最后,我们使用测试集评估了模型的性能,并计算了准确率、打印了分类报告和混淆矩阵。

# 导入必要的库
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix# 加载鸢尾花数据集
iris = load_iris()# 准备数据
X = iris.data  # 输入特征
y = iris.target  # 输出标签# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=40)# 创建逻辑回归模型
model = LogisticRegression()# 在训练集上拟合模型
model.fit(X_train, y_train)# 在测试集上进行预测
y_pred = model.predict(X_test)# 计算模型的准确率
accuracy = accuracy_score(y_test, y_pred)
print("模型的准确率:", accuracy)# 打印分类报告
print("分类报告:")
print(classification_report(y_test, y_pred))# 绘制混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
print("混淆矩阵:")
print(conf_matrix)

 执行结果:

五、总结 

线性回归的优缺点总结:

优点:

  1. 简单而直观: 线性回归模型简单易懂,容易解释,适用于初学者入门机器学习。

  2. 高效: 训练和预测的速度较快,适用于处理大规模数据集。

  3. 可解释性强: 可以量化输入变量与输出变量之间的线性关系,提供了对数据的直观理解。

  4. 稳定性好: 对于输入变量之间存在多重共线性的情况,线性回归表现稳定。

  5. 易于扩展: 可以与其他模型结合使用,如正则化方法(如岭回归、Lasso回归)等。

缺点:

  1. 对非线性关系拟合能力有限: 无法很好地处理输入变量与输出变量之间的非线性关系,容易出现欠拟合问题。

  2. 对异常值敏感: 对于数据中的异常值较为敏感,容易受到极端值的影响,需要进行异常值处理。

  3. 需要满足线性假设: 要求输入变量与输出变量之间存在线性关系,因此无法捕捉到复杂的非线性关系。

  4. 可能存在欠拟合或过拟合问题: 当模型过于简单或者特征空间较大时,容易出现欠拟合问题;而模型过于复杂或者数据量较小时,又容易出现过拟合问题。

  5. 无法处理分类问题: 线性回归主要用于解决连续型输出变量的问题,不适用于分类问题。

逻辑回归(Logistic Regression)是一种常用的分类算法,具有许多优点和缺点。

优点:

  1. 简单和快速: 逻辑回归是一种简单而快速的分类算法,易于实现和理解,适用于处理大规模数据集。

  2. 可解释性强: 逻辑回归模型的结果易于解释,能够输出特征对分类结果的影响程度,提供了对数据的直观理解。

  3. 适用于线性可分问题: 当数据集是线性可分的情况下,逻辑回归能够表现出较好的性能。

  4. 不易过拟合: 逻辑回归在参数调整适当的情况下,很少会出现过拟合的问题,即使数据集的特征空间很大。

  5. 能够输出概率值: 逻辑回归模型可以输出样本属于某一类的概率值,而不仅仅是类别标签,这对于一些需要概率估计的场景十分有用。

缺点:

  1. 只能处理线性可分问题: 逻辑回归是一种线性分类算法,只适用于线性可分的问题,无法处理非线性关系。

  2. 对异常值敏感: 逻辑回归对异常值敏感,容易受到极端值的影响,需要对数据进行预处理或异常值处理。

  3. 无法处理复杂关系: 逻辑回归不能很好地处理特征之间的复杂非线性关系,对于非线性的分类问题性能较差。

  4. 需要特征工程: 逻辑回归的性能受特征选择和特征工程的影响较大,需要合适的特征来提高模型性能。

  5. 可能存在欠拟合问题: 当数据集的特征空间较大且特征之间关系复杂时,逻辑回归容易出现欠拟合的问题,性能较差。

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

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

相关文章

WiFi已连接却不可上网是什么原因?

很多使用wifi上网的用户都遇到过这样的问题,就是电脑已经连接了wifi,但就是上不了网。着到底是怎么回事呢?今天,极客狗带大家一起来找找WiFi已连接却不可上网是什么原因,并给出对应的解决方。 原因分析: 可能是ip地址冲突所导致,也有可能是宽带出先故障,不妨试试下面的…

零基础入门数据挖掘系列之「特征工程」

摘要:对于数据挖掘项目,本文将学习应该从哪些角度做特征工程?从哪些角度做数据清洗,如何对特征进行增删,如何使用PCA降维技术等。 特征工程(Feature Engineering)对特征进行进一步分析&#xf…

Python - 深度学习系列30 - 使用LLaMA-Factory微调模型

说明 最实用的一种利用大语言模型的方式是进行微调。预训练模型与我们的使用场景一定会存在一些差异,而我们又不可能重头训练。 微调的原理并不复杂,载入模型,灌新的数据,然后运行再训练,保留checkpoints。但是不同项…

ExoPlayer架构详解与源码分析(12)——Cache

系列文章目录 ExoPlayer架构详解与源码分析(1)——前言 ExoPlayer架构详解与源码分析(2)——Player ExoPlayer架构详解与源码分析(3)——Timeline ExoPlayer架构详解与源码分析(4)—…

华为配置AP静态上线业务实验

配置AP静态上线业务示例 组网图形 图1 配置AP静态上线业务示例组网图 业务需求组网需求数据规划配置思路操作步骤配置文件扩展阅读 业务需求 管理员希望为AP配置静态IP地址,使AP能够找到正确的AC,当AP通过AC的认证后,实现AP在AC中正常上…

C++项目——集群聊天服务器项目(四)MySQL数据库

今天来介绍集群聊天器项目中MySQL数据库的相关表结构 集群聊天服务器项目需要进行好友、群组的增删操作以及好友离线状态的判断,需要在数据库中建立相关表进行增删改查操作,因此项目设计了如下五个表,大家可以自己动动小手,使用S…

机器学习——元学习

元学习(Meta Learning)是一种机器学习方法,旨在使模型能够学习如何学习。它涉及到在学习过程中自动化地学习和优化学习算法或模型的能力。元学习的目标是使模型能够从有限的训练样本中快速适应新任务或新环境。 在传统的机器学习中&#xff…

海外媒体宣发:十大国外中文网站-大舍传媒

十大国外中文网站 1、欧洲时报 覆盖欧洲且较具影响力的华文媒体 国外中文新闻网站,欧洲时报文化传媒集团旗舰日报《欧洲时报》旗下官方网站,总部设在法国巴黎,创刊于1983年,现已成为唯一发行覆盖全欧、发行量最大、最具影响力的华…

发展规划--IM系统

1、时代背景 5G应用,多终端应用,物联网应用,小程序,工业互联,大数据应用等等大前端时代的到来,程序员不能只关注crud,因为以后的服务并发量只会越来越多。 高并发架构师、大数据架构师或者说j…

国内ip地址怎么改?详解修改ip地址的步骤

在网络通信中,IP地址是设备在网络上的标识,对于用户、服务器和网络安全都至关重要。然而,有时候在特定情况下,可能需要修改IP地址以满足不同需求或解决特定问题。虎观代理小二将深入研究中国国内IP地址修改的方法与影响&#xff0…

C++ explicit隐式类型转换

单参数构造函数支持隐式类型的转换 什么意思? 简单来理解就是: 一个类对象的构造函数的参数只有一个,就可以直接进行赋值传参 例如构造函数的参数为int,且只有一个int 就可以直接将int类型的整型数据转换成类对象 也就是说从int类…

Unity构建详解(3)——SBP的依赖计算

【前置知识】 先要搞清楚Asset和Object的关系,可以简单理解为一个Asset对应多个Object。 unity自定义的Asset也要有一个存储的标准,其采用的是YAML,我们看到的所有Unity自定义的Asset格式,例如.prefab(预制体&#x…

研华工控机610L学习笔记2:visualstudio与第一个C#程序

今日继续学习工控机 C# 编程相关知识: 这篇结束后我将先进行一段时间的C#的学习研究,并写一些C#的笔记 后续再更新工控机编程设计相关 目录 1、安装visualstudio: 2、创建第一个C#程序: 3、寻找C#解决方案源文件: …

linux之zabbix自定义监控

zabbix基本配置见:写文章-CSDN创作中心https://mp.csdn.net/mp_blog/creation/editor/136783672 自定义监控规则 命令为who | wc -l 显示为2,主机一个,mobaxterm一个,思路是开启3个终端,让主机的zabbix服务自动检测1…

B端设计:如何让UI组件库成为助力,而不是阻力。

首发2023-09-24 15:42贝格前端工场 Hi,我是大千UI工场,网上的UI组件库琳琅满目,比如elementUI、antdesign、iview等等,甚至很多前端框架,也出了很多UI组件,如若依、Layui、bootstrap等等,作为U…

I/O多路复用:select/poll/epoll

最基本的 Socket 模型 要想客户端和服务器能在网络中通信,那必须得使用 Socket 编程,它是进程间通信里比较特别的方式,特别之处在于它是可以跨主机间通信。 Socket 的中文名叫作插口,咋一看还挺迷惑的。事实上,双方要…

基于SpringBoot图书进销存管理系统

采用技术 基于SpringBoot图书进销存管理系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringBootMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 用户信息管理 图书类型管理 商品退货管理 客户信息管理 图…

软件测试相关内容第六弹 -- 测试实战

写在前:hello大家早中晚上好!这里是西西,前面我们已经学习了关于测试相关基础的介绍,点击链接直达前方内容~ 测试内容博客链接初识软件测试点击跳转软件测试相关概念点击跳转测试生命周期、BUG、测试大体流程点击跳转测试用例、测…

数据结构·排序

1. 排序的概念及运用 1.1 排序的概念 排序:排序是将一组“无序”的记录序列,按照某个或某些关键字的大小,递增或递减归零调整为“有序”的记录序列的操作 稳定性:假定在待排序的记录序列中,存在多个具有相同关键字的记…

day03_mysql_课后练习 - 参考答案

文章目录 day03_mysql_课后练习mysql练习题第1题第2题第3题第4题第5题 day03_mysql_课后练习 mysql练习题 第1题 案例: 1、创建一个数据库:day03_test01_school 2、创建如下表格 表1 Department表的定义 字段名字段描述数据类型主键外键非空唯一D…