【机器学习】——线性模型

news2024/11/17 1:54:01

💻博主现有专栏:

                C51单片机(STC89C516),c语言,c++,离散数学,算法设计与分析,数据结构,Python,Java基础,MySQL,linux,基于HTML5的网页设计及应用,Rust(官方文档重点总结),jQuery,前端vue.js,Javaweb开发,Python机器学习等
🥏主页链接:

                Y小夜-CSDN博客

目录

🎯本文目的

🎯单变量线性回归预测披萨价格

🎃内容

🎃代码解析

🎃可能会发生的错误

✨测试数据无法测试进行reshape

✨不知道如何在图上显示测试后的数据

🎯二元线性模型预测学生成绩

 🎃内容

🎃代码解析

🎯岭回归预测波士顿房价

 🎃内容

🎃代码解析

🎯套索回归预测波士顿房价

 🎃内容

🎃代码解析

🎯逻辑回归识别鸢尾花

 🎃内容

🎃代码解析

🎃可能会发生的错误

✨逻辑回归模型最大迭代次数没有收敛

✨不知道如何调整逻辑回归模型的参数


🎯本文目的

  • (一)理解线性模型的基本原理
  • (二)能够使用pandas生成简单数据集
  • (三)能够使用sklearn库进行线性模型的训练和预测
  • (四)掌握岭回归、套索回归模型的参数调节
  • (五)能够使用sklearn库进行逻辑回归模型的训练和预测

🎯单变量线性回归预测披萨价格

🎃内容

披萨价格和披萨的直径关系如下表所示。

直径(英寸)

价格(美元)

6

7

8

11

10

13

14

17.5

18

18

要求:

  • 使用一元线性回归模型
  • 输出模型的参数。
  • 预测直径为12英寸的披萨价格是多少?
  • 图形展示样本数据及模型。(使用直线图形展示模型,使用散点图展示各个数据点)

🎃代码解析

import pandas as pd

data={'foot':[6,8,10,14,18],'price':[7,11,13,17.5,18]}

data_frame=pd.DataFrame(data)

data_frame.head()

        使用了Pandas 库创建了一个数据框(DataFrame),其中包含了两列数据:footpricefoot 列包含了脚的尺寸数据,而 price 列包含了对应的鞋子价格数据。接下来,data_frame.head() 方法被调用,该方法用于显示数据框的前几行,默认显示前五行。这是为了让用户能够快速浏览数据框的内容。


import numpy as np

import matplotlib.pyplot as plt

from sklearn.linear_model import LinearRegression

reg=LinearRegression()

x=data_frame['foot'].values.reshape(-1,1)

y=data_frame['price']

reg.fit(x,y)
        使用了 NumPy、Matplotlib 和 Scikit-learn 库。首先,它从 data_frame 数据框中提取了 foot 列和 price 列的数据作为自变量 x 和因变量 y。然后,使用 Scikit-learn 中的线性回归模型(LinearRegression)对数据进行拟合,即通过最小化残差平方和来拟合线性模型的系数。
print(reg.coef_,reg.intercept_)

        这段代码打印了线性回归模型的系数和截距。在线性回归模型中,系数表示自变量的变化对因变量的影响,截距表示当自变量为0时,因变量的值。


pisa=np.array([12]).reshape(-1,1)

reg.predict(pisa)

        这段代码使用了训练好的线性回归模型 reg 对输入的 pisa 数据进行了预测。在这里,pisa 是一个 NumPy 数组,包含了一个值为 12 的数据点,通过 .reshape(-1,1) 将其转换成了二维数组的形式,以满足线性回归模型的输入要求。


z=np.linspace(5,20,20)
plt.scatter(x,y,s=80)
plt.scatter([12],reg.predict(pisa),s=80)
plt.plot(z,reg.predict(z.reshape(-1,1)),c='k')
plt.title('pisa')
plt.show()

        这段代码绘制了一个散点图,并在其中添加了线性回归模型的拟合线和一个新数据点的预测结果。

  • plt.scatter(x, y, s=80) 绘制了原始数据的散点图,其中 x 是脚的尺寸,y 是对应的鞋子价格。参数 s 控制了散点的大小。

  • plt.scatter([12], reg.predict(pisa), s=80) 添加了一个新数据点 (12, 预测值) 的散点,其中预测值通过模型对尺寸为 12 的脚进行预测得到。

  • plt.plot(z, reg.predict(z.reshape(-1,1)), c='k') 绘制了线性回归模型的拟合线,其中 z 是从 5 到 20 的一系列数值,表示了脚的尺寸范围。

    • z 是一个包含了一系列脚的尺寸的数组,范围从 5 到 20,这些数值用来表示横坐标的取值范围。

    • reg.predict(z.reshape(-1,1)) 使用训练好的线性回归模型 reg 对输入的尺寸数据进行预测,得到对应的价格预测值。

    • plt.plot(z, reg.predict(z.reshape(-1,1)), c='k') 绘制了这些尺寸数据与对应的价格预测值之间的关系。参数 c='k' 设置了线条的颜色为黑色。

  • plt.title('pisa') 设置了图表的标题为 'pisa'。

  • plt.show() 显示了绘制好的图表。

🎃可能会发生的错误

✨测试数据无法测试进行reshape

问题描述:

原因:

        当尝试使用 reg.predict(pisa) 进行预测时出现了错误。错误信息指出输入的数据需要是一个二维数组,但你提供了一个一维数组。为了解决这个问题,你可以按照提示使用 reshape(-1, 1) 方法将数据转换成二维数组的形式,或者直接将其作为包含单个样本的二维数组。

解决办法:

pisa=np.array([12]).reshape(-1,1)
reg.predict(pisa)

✨不知道如何在图上显示测试后的数据

 问题描述:

        没有x=12的那个点

原因:

        没有scatter()中生成

解决办法:

        在描述其他点后,在加入这个点(添加一下代码),最后在画图

plt.scatter([12],reg.predict(pisa),s=80)

🎯二元线性模型预测学生成绩

 🎃内容

学生的最终成绩由平时成绩和期末成绩构成。某课程的成绩构成标准未知。有7个学生的数据样本如下图所示。某位同学平时成绩83,期末成绩85,预测该同学的最终成绩是多少?

🎃代码解析

import pandas as pd
data={'pingshi':[80,82,85,90,86,82,78],'qimo':[86,80,78,90,82,90,80],'zuizhong':[84.2,80.6,80.1,90,83.2,87.6,79.4]}
data_frame=pd.DataFrame(data)
data_frame.head(7)

        创建了一个包含学生考试成绩的DataFrame,其中包括平时成绩(pingshi)、期末考试成绩(qimo)和最终总成绩(zuizhong)。数据包含了7个学生的成绩信息。

  • 平时成绩列包含了每个学生的平时考试成绩。
  • 期末考试成绩列包含了每个学生的期末考试成绩。
  • 最终总成绩列包含了每个学生的最终总成绩,这可能是平时成绩和期末考试成绩的加权平均值或者其他组合方式计算得出。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
reg=LinearRegression()
x=data_frame.drop('zuizhong',axis=1)
y=data['zuizhong']
reg.fit(x,y)

        使用了Scikit-Learn库中的LinearRegression模型对学生的平时成绩(pingshi)和期末考试成绩(qimo)来预测最终总成绩(zuizhong)。

具体步骤如下:

  1. 从DataFrame中提取特征x,这里是平时成绩和期末考试成绩,即去除了最终总成绩这一列。
  2. 从数据字典中提取目标变量y,即最终总成绩。
  3. 初始化一个LinearRegression模型reg。
  4. 使用提取的特征x和目标变量y来拟合(训练)LinearRegression模型。
  5. 训练后,模型将会得出最佳拟合的系数和截距,用于预测最终总成绩。

student=[[83,85]]
reg.predict(student)

        用训练好的线性回归模型reg对一个新的学生的平时成绩和期末考试成绩进行预测。这个新的学生的平时成绩为83,期末考试成绩为85。

具体步骤如下:

  1. 创建一个包含平时成绩和期末考试成绩的二维列表student,其中平时成绩为83,期末考试成绩为85。
  2. 调用reg.predict(student)方法,使用训练好的模型对这个学生的成绩进行预测。

print(reg.coef_,reg.intercept_)
print(f"所以该课程成绩构成标准为:最终成绩= {reg.coef_[0]}*平时成绩 + {reg.coef_[1]}*期末成绩 + {reg.intercept_}")

        打印了线性回归模型的系数(coefficients)和截距(intercept),然后使用这些参数构建了最终的成绩构成标准。

具体解析如下:

  • reg.coef_是一个数组,包含了线性回归模型中每个特征(平时成绩和期末考试成绩)的系数。
  • reg.intercept_是截距,表示当所有特征都为0时,最终总成绩的预测值。

🎯岭回归预测波士顿房价

 🎃内容

        使用岭回归预测波士顿房价,并调试参数拟合出一个合适的模型。提示:波士顿房价数据集在datasets.load_boston中。

🎃代码解析

from sklearn.datasets import load_boston
data1=load_boston()
from sklearn.model_selection import train_test_split
x,y=data1.data,data1.target
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=8)
x.shape,x_train.shape

from sklearn.linear_model import Ridge
ridge=Ridge(alpha=200000).fit(x_train,y_train)
print(ridge.score(x_train,y_train))
print(ridge.score(x_test,y_test))

        使用了波士顿房价数据集(Boston House Prices dataset)进行岭回归(Ridge Regression)的建模和评估。

具体步骤如下:

  1. 导入波士顿房价数据集并分割数据集为训练集和测试集:

    • 使用load_boston()函数加载波士顿房价数据集,数据集包括房屋特征(x)和目标变量(y)。
    • 使用train_test_split函数将数据集分割为训练集(x_trainy_train)和测试集(x_testy_test),设置了random_state=8来确保随机性的可重复性。
  2. 建立岭回归模型并进行训练:

    • 使用Ridge类创建岭回归模型ridge,设置了alpha=200000作为正则化参数。
    • 使用训练集数据(x_trainy_train)对岭回归模型进行训练。
  3. 输出模型在训练集和测试集上的决定系数(R²分数):

    • 使用score方法分别计算并输出岭回归模型在训练集和测试集上的决定系数(R²分数),用于评估模型的拟合程度。

🎯套索回归预测波士顿房价

 🎃内容

        使用套索回归预测波士顿房价,并调试参数拟合出一个合适的模型。提示:波士顿房价数据集在datasets.load_boston中。

🎃代码解析

from sklearn.datasets import load_boston
data1=load_boston()
from sklearn.model_selection import train_test_split
x,y=data1.data,data1.target
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=8)
x.shape,x_train.shape
from sklearn.linear_model import Lasso
ridge=Lasso(alpha=20).fit(x_train,y_train)
print(ridge.score(x_train,y_train))
print(ridge.score(x_test,y_test))

        这段代码与上一个类似,但是使用的是Lasso回归(Lasso Regression)而不是岭回归。

具体步骤如下:

  1. 导入波士顿房价数据集并分割数据集为训练集和测试集,与之前相同。

  2. 建立Lasso回归模型并进行训练:

    • 使用Lasso类创建Lasso回归模型ridge,设置了alpha=20作为正则化参数。
    • 使用训练集数据(x_trainy_train)对Lasso回归模型进行训练。
  3. 输出模型在训练集和测试集上的决定系数(R²分数):

    • 使用score方法分别计算并输出Lasso回归模型在训练集和测试集上的决定系数(R²分数),用于评估模型的拟合程度。

🎯逻辑回归识别鸢尾花

 🎃内容

        请使用逻辑回归识别鸢尾花,并调试参数拟合出一个合适的模型。

提示:鸢尾花数据集在datasets.load_iris中。

🎃代码解析

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
iris=load_iris()
x,y=iris.data,iris.target
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=42)
clf=LogisticRegression(max_iter=1000000,C=10)
clf.fit(x_train,y_train)
print(clf.score(x_train,y_train))
print(clf.score(x_test,y_test))

使用了鸢尾花数据集(Iris dataset)进行逻辑回归(Logistic Regression)的建模和评估。

具体步骤如下:

  1. 导入鸢尾花数据集并分割数据集为训练集和测试集:

    • 使用load_iris()函数加载鸢尾花数据集,数据集包括花朵的特征(x)和类别标签(y)。
    • 使用train_test_split函数将数据集分割为训练集(x_trainy_train)和测试集(x_testy_test),设置了random_state=42来确保随机性的可重复性。
  2. 建立逻辑回归模型并进行训练:

    • 使用LogisticRegression类创建逻辑回归模型clf,设置了max_iter=1000000来增加最大迭代次数,C=10作为正则化参数。
    • 使用训练集数据(x_trainy_train)对逻辑回归模型进行训练。
  3. 输出模型在训练集和测试集上的准确率(Accuracy):

    • 使用score方法分别计算并输出逻辑回归模型在训练集和测试集上的准确率,用于评估模型的性能。

🎃可能会发生的错误

✨逻辑回归模型最大迭代次数没有收敛

问题描述:

原因:

    这个警告是由于逻辑回归模型在默认的最大迭代次数下没有收敛而产生的。你可以尝试增加 max_iter 参数的值来解决这个问题。

解决办法:

clf=LogisticRegression(max_iter=1000000,C=10)

✨不知道如何调整逻辑回归模型的参数

 问题描述:

        逻辑回归模型过拟合或者欠拟合时,不知道如何调整参数

解决办法:

        在Scikit-learn中,逻辑回归模型(LogisticRegression)不具有 alpha 参数。alpha 通常用于控制正则化的强度,但在逻辑回归模型中,正则化是通过 penalty 参数来控制的,默认情况下为L2正则化。

        如果你想要使用L2正则化并且调整正则化强度,可以修改 C 参数,其中 C 是正则化的倒数,因此较小的 C 值表示更强的正则化。

如:

clf = LogisticRegression(max_iter=1000, C=0.1)

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

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

相关文章

typescript 配置精讲 | moduleResolution

大家好,我是17。 moduleResolution 是 typescript 模块配置中最重要的一个配置,所以 17 单拿出来讲一下。如果你去看文档还是挺复杂的,但如果不去深究细节,只想知道如何配置还是很简单的。3 分钟就能学会。 moduleResolution 的…

neo4j开放远程连接

注:本博客所用neo4j版本为社区5.12版 第一步:修改neo4j配置文件 首先找到neo4j的安装位置,点击进入conf文件夹,随后点击neo4j.conf文件,在“Network connector configuration”下面的单元中找到server.default_liste…

奥枫软件Java要个16K遇到地狱级难度,醉了。。。

我只能说地狱难度,没绝对把握就别去了。我凭借前辈的经验,和当时天时地利人和,六道题答得很不错,但还是没通过。我有备而来都没过,现场写那些应该都是白忙活了。 一面 1,分割一个整数。如123,结…

贪心-AcWing 125. 耍杂技的牛-XMUOJ蒙德冒险者的游戏

题目 思路 每头牛的危险值 他前面牛的w(重量值)之和 - 自身的s(强壮值) 要使每头牛的危险值最小,根据贪心思想: 自身w值越大应该放到底部(即减小上述式中的被减数) 自身s值越大应该放到底部(即增大上述式中的减数&…

KingbaseES数据库union的用法

数据库版本:KingbaseES V008R006C008B0014 文章目录如下 1. union的概念 2. union的语法 3. union的用法 3.1. 去重(union) 3.2. 不去重(union all) 3.3. 聚合运算 3.4. 异常案例 1. union的概念 UNION 是结构…

ClickHouse架构概览 —— Clickhouse 架构篇(一)

文章目录 前言Clickhouse 架构简介Clickhouse 的核心抽象列和字段数据类型块表 Clickhouse 的运作过程数据插入过程数据查询过程数据更新和删除过程 前言 本文介绍了ClickHouse的整体架构,并对ClickHouse中的一些重要的抽象对象进行了分析。然后此基础上&#xff0…

揭秘OS模块:文件与文件夹的遍历艺术

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言 二、os.listdir():当前目录的扫描者 三、os.walk():文件系…

深度学习——自己的训练集——训练模型(CNN)

训练模型 1.导入必要的库2.加载类别名称3.创建标签映射字典4.加载图像数据和对应的标签5.构建和编译CNN模型6.训练模型7.保存训练好的模型 1.导入必要的库 导入处理数据和训练模型时需要的库 os: 这个模块提供了与操作系统交互的功能,比如文件和目录操作。 cv2: 这…

如何选择优质的气膜体育馆工程服务商—轻空间

随着现代生活的便利化和时代感的增强,气膜体育馆成为越来越多人的选择。这种美观实用的建筑在学校、社区和体育中心等地广泛应用。许多投资者和客户都有意建造气膜体育馆,但在选择工程服务商时,往往面临困惑。以下几点将帮助您做出明智的选择…

grafana大盘展示node_expod节点

node_expod添加lables标签 Prometheus查询 语句查询 node_exporter_build_infografna添加变量查询 正常有值 切换其他的是有值的 我的报错原因 因为有多个数据源,我选择错了,因为修改的lable标签是其他数据源,所以获取不到 查询语句 我的变量是 $app node_filesyste…

【优选算法】位运算 {位运算符及其优先级;位运算的应用:判断位,打开位,关闭位,转置位,位图,get lowbit,close lowbit;相关编程题解析}

一、位运算符及其优先级 我们知道,计算机中的数在内存中都是以二进制形式进行存储的 ,而位运算就是直接对整数在内存中的二进制位进行操作,因此其执行效率非常高,在程序中尽量使用位运算进行操作,这会大大提高程序的性…

SpringBoot 上传文件示例

示例效果&#xff1a; 前端代码&#xff1a; <html> <head><title>上传文件示例</title></head> <body> <h2>方式一&#xff1a;普通表单上传</h2> <form action"/admin/upload" method"post" enctyp…

【Python】 Django 框架如何支持百万级日访问量

基本原理 Django 是一个高级的 Python Web 框架&#xff0c;它鼓励快速开发和干净、实用的设计。Django 遵循 MVC&#xff08;模型-视图-控制器&#xff09;设计模式&#xff0c;允许开发者通过编写更少的代码来构建高质量的 Web 应用程序。Django 自带了许多内置功能&#xf…

Python-opencv通过距离变换提取图像骨骼

文章目录 距离变换distanceTransform函数 距离变换 如果把二值图像理解成地形&#xff0c;黑色表示海洋&#xff0c;白色表示陆地&#xff0c;那么陆地上任意一点&#xff0c;到海洋都有一个最近的距离&#xff0c;如下图所示&#xff0c;对于左侧二值图像来说&#xff0c;【d…

嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

golang中的md5、sha256数据加密文件md5/sha256值计算步骤和运行内存图解

在go语言中对数据计算一个md5&#xff0c;或sha256和其他语言 如java, php中的使用方式稍有不同&#xff0c; 那就是要加密的数据必须通过流的形式写入到你创建的Hash对象中。 Hash数据加密步骤 1. 先使用对应的加密算法包中的New函数创建一个Hash对象&#xff0c;(这个也就是…

linux经典定时任务

在使用时记得替换为自己的脚本路径。请在相应的脚本第一行加上#!/bin/bash&#xff0c;否则脚本在定时任务中无法执行。 1、在每天凌晨2点执行 0 2 * * * /bin/sh bashup.sh 2、每天执行两次 下面的示例命令将在每天上午5点和下午5点执行。您可以通过逗号分隔指定多个时间戳…

vue中的$nextTick和过渡与动画

一.vue中的$nextTick 简述与用法&#xff1a;这是一个生命周期钩子 1.语法&#xff1a;this.$nextTick(回调函数) 2.作用&#xff1a;在下一次DOM更新结束后执行其指定的回调 3.什么时候用&#xff1a;当修改数据后&#xff0c;要基于更新后的新dom进行某些操作时&#xff0c;…

vue.js基础组件4--下

1.动态组件 1.定义动态组件 利用动态组件可以动态切换页面中显示的组件。使用<component>标签可以定义动态组件&#xff0c;语法格式如下。 <component is"要渲染的组件"></component>上述语法格式中&#xff0c;<component>标签必须配合i…

爬山算法全解析:掌握优化技巧,攀登技术高峰!

一、引言 爬山算法是一种局部搜索算法&#xff0c;它基于当前解的邻域中进行搜索&#xff0c;通过比较当前解与邻域解的优劣来更新当前解&#xff0c;从而逐步逼近最优解。本文将对爬山算法进行详细的介绍。 二、爬山算法简介 爬山算法是一种基于贪心策略的优化算法&#xff…