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

news2024/12/25 23:41:01

目录

前言

一、什么是线性回归

二、什么是逻辑回归

三、基于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.coloradmin.cn/o/1543439.html

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

相关文章

使用zabbix自动发现规则监控oracle分区表的分区键的合法

一、 创建从数据库查询原始数据脚本 编写脚本query_table.sh vim query_table.sh #!/bin/bash temp_outfile"/tmp/table.source" outfile"/tmp/table.txt" source /home/oracle/.bash_profilesqlplus -s zabbix/zabbix>${temp_outfile}<<EOF c…

Hive SQL必刷练习题:留存率问题(*****)

留存率&#xff1a; 首次登录算作当天新增&#xff0c;第二天也登录了算作一日留存。可以理解为&#xff0c;在10月1号登陆了。在10月2号也登陆了&#xff0c;那这个人就可以算是在1号留存 今日留存率 &#xff08;今日登录且明天也登录的用户数&#xff09; / 今日登录的总…

Redis入门到实战-第十一弹

Redis实战热身Bitmaps篇 完整命令参考官网 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是一个开源的&#xff08;采用BSD许可证&#xff09;&#xff0c;用作数据库、缓存、消息代理和…

Spring boot2.7整合jetcache方法缓存 设置定时刷新 解决多系统同时操作数据问题

上文 Spring boot2.7整合jetcache方法缓存 处理数据发生变化时同步更新缓存 删除缓存操作 解决了 缓存更新的问题 但是 现在有个问题 例如 我们 A系统 和 B系统 同时缓存了这一组数据 但是 A系统数据发生了更新 但是 B系统并不知道 其实 也没有特别好的办法同步通知 但可以控…

复旦大学EMBA肖仰华:人类文明或许将因为AI迎来一段“盘整期”

“君子知道”复旦大学EMBA前沿论坛上&#xff0c;复旦大学计算机学院肖仰华教授曾为企业家同学进行过主题分享。他认为&#xff0c;Sora只是开始&#xff0c;AI或让人类文明进入“盘整期”。      在人工智能的浩瀚世界中&#xff0c;Sora也只是冰山一角。当AI技术“高歌猛…

网约车APP小程序源码代驾顺风拼车货运司乘端安卓苹果源码可二开

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 一、详细介绍 系统是基于Thinkphpuniapp开发的&#xff0c;全开源未加密&#xff0c;这套源码可以拿回去自己做二开 后台用户端司机端 功能详情介绍&#xff1a; 车主实名认证&#xff0c;驾驶证认证&#xff0c;车…

Pycharm服务器配置python解释器并结合内网穿透实现公网远程开发

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

网络——套接字编程UDP

目录 端口号 源端口号和目的端口号 认识TCP协议和UDP协议 网络字节序 socket编程接口 socket常见接口 sockaddr结构 UDP socket bind recvfrom sendto 编写客户端 绑定INADDR_ANY 实现聊天功能 端口号 在这之前我们已经说过源IP地址和目的IP地址&#xff0c;还有…

STM32学习笔记(6_4)- TIM定时器的输出比较和PWM代码

无人问津也好&#xff0c;技不如人也罢&#xff0c;都应静下心来&#xff0c;去做该做的事。 最近在学STM32&#xff0c;所以也开贴记录一下主要内容&#xff0c;省的过目即忘。视频教程为江科大&#xff08;改名江协科技&#xff09;&#xff0c;网站jiangxiekeji.com 现在开…

ssm002学院党员管理系统+jsp

鄂尔多斯应用技术学院党员管理系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对鄂尔多斯应用技术学…

UE5C++学习(四)--- SaveGame类存储和加载数据

上一篇说到使用数据表读取数据&#xff0c;如果我开始玩游戏之后&#xff0c;被怪物打了失去了一部分血量&#xff0c;这个时候我想退出游戏&#xff0c;当我再次进入的时候&#xff0c;希望仍然保持被怪物打之后的血量&#xff0c;而不是重新读取了数据表&#xff0c;这个时候…

$.when.apply($, deferreds).done(function() {}) 用法

$.when.apply($, deferreds).done(function() {}) 这行代码是 jQuery 中用于处理多个异步操作的一种模式。让我们逐步解释其用法&#xff1a; $.when(): 这是 jQuery 中的一个方法&#xff0c;用于创建一个新的 Deferred&#xff08;延迟&#xff09;对象。Deferred 对象用于管…

4.1.1 SN74LVC245A型总线收发器

SN74LVC245A是德州仪器(Texas Instruments)推出的一款集成电路芯片,属于SN74系列。它是一款双向总线驱动器,可用于高速CMOS逻辑电平之间的电平转换。这款芯片可以实现3.3V/5V逻辑电平之间的转换,具有高速和低功耗的特点。SN74LVC245A在电子系统中常用于数据总线的电平转换…

学习要不畏难

我突然发现&#xff0c;畏难心是阻碍我成长的最大敌人。事未难&#xff0c;心先难&#xff0c;心比事都难&#xff0c;是我最大的毛病。然而一念由心生&#xff0c;心不难时&#xff0c;则真难事也不再难。很多那些自认为很难的事&#xff0c;硬着头皮做下来的时候&#xff0c;…

ETF细分,一文看懂(一)

很多朋友现在都喜欢交流ETF&#xff0c;但是ETF里面细分了很多&#xff0c;有T0的也有T1的。费用很多也不一样&#xff0c;今天我们详细说说ETF的分类&#xff0c;给大家一个明细。 ETF就是交易型开放式指数基金。它结合了开放式基金和封闭式基金的技术特点&#xff0c;是一…

TSINGSEE青犀智慧充电桩消防安全烟雾火焰AI算法识别预警方案

一、方案背景 随着AI人工智能、大数据、云计算等技术快速发展与落地&#xff0c;视频智能分析技术在智慧充电桩场景中的应用也越来越广泛。这种技术能够为充电桩站点提供全方位的监控和管理&#xff0c;提高运营效率&#xff0c;保障充电站设备的安全和稳定运行。 通过TSINGS…

Godot 学习笔记(5):彻底的项目工程化,解决GodotProjectDir is null+工程化范例

文章目录 前言GodotProjectDir is null解决方法解决警告问题根本解决代码问题测试引用其实其它库的输出路径无所谓。 工程化范例环境命名规范Nuget项目结构架构代码ISceneModelIOC服务 测试GD_Extension 通用扩展TestUtils GD_ProgramTestServiceMainSceneModel Godot对应的脚本…

学习鸿蒙基础(7)

一、Watch状态变量更改通知 Watch应用于对状态变量的监听。如果开发者需要关注某个状态变量的值是否改变&#xff0c;可以使用Watch为状态变量设置回调函数。 1、装饰器参数&#xff1a;必填。常量字符串&#xff0c;字符串需要有引号。是(string)> void自定义成员函数的方法…

为什么电商系统一定要跟企业ERP做数据对接?

一篇文章告诉你&#xff0c;为什么电商系统一定要跟企业ERP做数据对接&#xff1f; 在电商日益发展的情况下&#xff0c;每个电商企业的单量越来越大。但是电商系统对于财务来说并不友好&#xff0c;所以企业会另外上一套财务系统方便财务做账和企业内部管理。那如果还是按照之…

vue2 和 vue3 配置路由有什么区别

vue2 和 vue3 配置路由有什么区别 初始化路由器实例&#xff1a;注入到应用中&#xff1a;动态路由参数和捕获所有路由&#xff1a;编程式导航 API&#xff1a;异步加载组件&#xff1a; vue2 如何 使用路由 第一步&#xff1a;安装 vue-router第二步&#xff1a;创建路由组件第…