sklearn-多元线性回归

2023-11-01

sklearn-多元线性回归

和简单线性回归使用单一解释变量和单一系数不同,多元线性回归使用任意数量的解释变量,每个解释变量对应一个系数。用于线性回归的模型也可以被表示为向量计法

多元线性回归

Y = Xβ

Y是一个由训练实例响应变量组成的列向量。β 是一个由模型参数值组成的列向量。X有时也被称为设计矩
阵,是一个由训练实例解释变量组成的mn的矩阵。m是训练实例的数量,n是特征的数量

我们可以使用NumPy库解出β 值

β = [(XT ∙ X)](-1) ∙(XT∙y)

dot:点乘

inv:逆

transpose:转置

from numpy.linalg import inv
from numpy import dot, transpose
X = [[1, 6, 2], [1, 8, 1], [1, 10, 0], [1, 14, 2], [1, 18, 0]]
y = [[7], [9], [13], [17.5], [18]]
print(dot(inv(dot(transpose(X), X)), dot(transpose(X), y)))

NumPy库也提供了一个最小二乘函数,它能被用来更简洁地解出参数值
lstsq()是scipy.linalg库的线性方程组最小二乘法求解的功能
lstsq()具有以下基本用法:

import scipy.linalg
x, residuals, rank, s =lstsq(a, b,rcond=None)
将a和b视为numpy ndarrays。

这里:

a - nxm的float64 numpy矩阵,即系数基底矩阵。
b - length为m的float64 numpy一维阵列或n维蚁形幅广阵列,即要拟合的观测值。
x - length为n的Numpy一维阵列,包含最小二乘解x的元素。
residuals - 误差的平方和。 使得||Ax - b||^2 = residuals。
rank和s - 分别为a的秩和奇异值。

rcond参数是非常重要的,因为它控制小于阈值的奇异值被视为零的机制。通过设置rcond,我们可以控制解的稳定性和精度

from numpy.linalg import lstsq
X = [[1, 6, 2], [1, 8, 1], [1, 10, 0], [1, 14, 2], [1, 18, 0]]
y = [[7], [9], [13], [17.5], [18]]
print(lstsq(X, y, rcond=None)[0])


简单测试

from sklearn.linear_model import LinearRegression
X = [[6, 2], [8, 1], [10, 0], [14, 2], [18, 0]]
y = [[7], [9], [13], [17.5], [18]]
model = LinearRegression()
model.fit(X, y)
X_test = [[8, 2], [9, 0], [11, 2], [16, 2], [12, 0]]
y_test = [[11], [8.5], [15], [18], [11]]
predictions = model.predict(X_test)
for i, prediction in enumerate(predictions):
    print('Predicted: %s, Target: %s' % (prediction, y_test[i]))
    print('R-squared: %.2f' % model.score(X_test, y_test))

enumerate()是一个非常实用的内置python函数。它可以将一个可迭代的对象(如列表、元组或字符串)同时映射到其索引和值。这可以用来处理或列举每个元素及其相应的索引。

基本用法如下:

enumerate(iterable)

这里:

iterable - 任何可迭代的对象,如列表、元组、字符串等。

例如:

fruits = [‘apple’, ‘banana’, ‘cherry’]
for index, fruit in enumerate(fruits):
print(index, fruit)

0 apple
1 banana
2 cherry

二阶多项式回归

y= α+ β_1 x+ β_2 x^2

np.linspace()方法用于生成均匀间隔的数字序列。

PolynomialFeatures() 是NumPy中的一个工具,用于特征工程和多项式回归。 它可以用来生成多项式项特征,以用于模型训练。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
X_train = [[6], [8], [10], [14], [18]]
y_train = [[7], [9], [13], [17.5], [18]]
X_test = [[6], [8], [11], [16]]
y_test = [[8], [12], [15], [18]]
regressor = LinearRegression()
regressor.fit(X_train, y_train)
xx = np.linspace(0, 26, 100)
yy = regressor.predict(xx.reshape(xx.shape[0], 1))
plt.plot(xx, yy)
quadratic_featurizer = PolynomialFeatures(degree=2)
X_train_quadratic = quadratic_featurizer.fit_transform(X_train)
X_test_quadratic = quadratic_featurizer.transform(X_test)
#print(quadratic_featurizer.get_feature_names())
#print(quadratic_featurizer.n_input_features_)
#print(quadratic_featurizer.n_output_features_)
regressor_quadratic = LinearRegression()
regressor_quadratic.fit(X_train_quadratic, y_train)
xx_quadratic = quadratic_featurizer.transform(xx.reshape(xx.shape[0], 1))
plt.plot(xx, regressor_quadratic.predict(xx_quadratic), c='r', linestyle='--')
plt.title('Pizza price regressed on diameter')
plt.xlabel('Diameter in inches')
plt.ylabel('Price in dollars')
plt.axis([0, 25, 0, 25])
plt.grid(True)
plt.scatter(X_train, y_train)
plt.show()
print(X_train)
print(X_train_quadratic)
print(X_test)
print(X_test_quadratic)
print('Simple linear regression r-squared', regressor.score(X_test,
y_test))
print('Quadratic regression r-squared',regressor_quadratic.score(X_test_quadratic, y_test))

在这里插入图片描述
[[6], [8], [10], [14], [18]]
[[ 1. 6. 36.]
[ 1. 8. 64.]
[ 1. 10. 100.]
[ 1. 14. 196.]
[ 1. 18. 324.]]
[[6], [8], [11], [16]]
[[ 1. 6. 36.]
[ 1. 8. 64.]
[ 1. 11. 121.]
[ 1. 16. 256.]]
Simple linear regression r-squared 0.809726797707665
Quadratic regression r-squared 0.8675443656345054

应用线性回归

探索数据winequality-red.csv链接: winequality-red.csv

相对酸度、挥发性酸度、柠檬酸、剩余糖量、氯化物、自由硫化氢、总硫化氢、密度、pH、二氧化硫、酒精度、质量

import pandas as pd
df = pd.read_csv('./winequality-red.csv', sep=';')
df.describe()

酒精含量和质量之间存在弱正相关关系

import matplotlib.pylab as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.scatter(df['alcohol'], df['quality'])
plt.xlabel('Alcohol酒精含量')
plt.ylabel('Quality质量')
plt.title('Alcohol Against Quality')
plt.show()

在这里插入图片描述

拟合和评估模型

train_test_split是scikit-learn库中用于划分训练和测试集的非常常用的工具。 它具有以下主要参数:

X - 特征数据集,以NumPy矩阵或Pandas DataFrame形式提供。 y - 目标变量,以Numpy数组或Pandas Series形式提供。

from sklearn.linear_model import LinearRegression
import pandas as pd
import matplotlib.pylab as plt
from sklearn.model_selection import train_test_split
df = pd.read_csv('./winequality-red.csv', sep=';')
X = df[list(df.columns)[:-1]]
y = df['quality']
X_train, X_test, y_train, y_test = train_test_split(X, y)
regressor = LinearRegression()
regressor.fit(X_train, y_train)
y_predictions = regressor.predict(X_test)
print('R-squared: %s' % regressor.score(X_test, y_test))

评估交叉验证

cross_val_score用于评估交叉验证得分来评估机器学习模型的准确性。

它具有以下主要参数:

estimator - 需要评估的机器学习模型。

X - 特征数据集,以NumPy矩阵或Pandas DataFrame形式提供。

y - 目标变量,以Numpy数组或Pandas Series形式提供。

cv - 交叉验证技术,通常是KFold()、StratifiedKFold()或GroupKFold()。 它用于定义如何将数据划分为训练和验证集。

n_jobs - 用于并行计算的CPU核心数。 默认为1,不进行并行计算。

scoring - 用于评估模型性能的评分方法,例如"accuracy"、"f1_score"等。 默认为None,这将导致模型的默认评估方法。

import pandas as pd
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LinearRegression
df = pd.read_csv('./winequality-red.csv', sep=';')
X = df[list(df.columns)[:-1]]
y = df['quality']
regressor = LinearRegression()
scores = cross_val_score(regressor, X, y, cv=5)
print(scores.mean())
print(scores)

梯度下降法

load_boston() 从scikit-learn中加载波士顿房价数据集。 它包含506行和13列的数据。

SGDRegressor是scikit-learn中实现的随机梯度下降(SGD)回归器。它用于拟合线性回归模型。
SGDRegressor是scikit-learn库中的一种基于增量学习算法的线性回归器。它适用于大规模数据并具有较低的内存开销。

import numpy as np
from sklearn.datasets import load_boston
from sklearn.linear_model import SGDRegressor
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
data = load_boston()
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target)
X_scaler = StandardScaler()
y_scaler = StandardScaler()
X_train = X_scaler.fit_transform(X_train)
y_train = y_scaler.fit_transform(y_train.reshape(-1,1)).reshape(-1)
X_test = X_scaler.transform(X_test)
y_test = y_scaler.transform(y_test.reshape(-1,1)).reshape(-1)
regressor = SGDRegressor(loss='squared_loss')
scores = cross_val_score(regressor, X_train, y_train, cv=5)
print('Cross validation r-squared scores: %s' % scores)
print('Average cross validation r-squared score: %s' % np.mean(scores))
regressor.fit(X_train, y_train)
print('Test set r-squared score %s' % regressor.score(X_test, y_test))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sklearn-多元线性回归 的相关文章

随机推荐

  • php在apache中的三种工作方式:CGI模式、FastCGI模式、Apache 模块DLL

    原文地址 http hi baidu com thisuc item 818a77725234f011d1dcb314 一 CGI模式与模块模式比较 php在apache中两种工作方式的区别 CGI模式 Apache 模块DLL 这两种工作
  • LSM6DSR驱动

    ST陀螺仪LSM6DSR的驱动 由于最近MPU的价格疯涨 不得已只能更换主控上的陀螺仪芯片 刚好VL53L1X这颗激光芯片的厂家ST有几颗陀螺仪可以用 就拿了几颗试一下 感觉效果还不错 好像可以用于手机做单击双击的判断 于是突发奇想是不是也
  • 【华为OD机试真题 Java】加扰字符串(100%通过+全网最详细注释)

    前言 本专栏将持续更新华为OD机试题目 并进行详细的分析与解答 包含完整的代码实现 希望可以帮助到正在努力的你 关于OD机试流程 面经 面试指导等 如有任何疑问 欢迎联系我 wechat steven moda email nansun09
  • PCA降维以及维数的确定

    概述 PCA principal components analysis 即主成分分析技术 又称为主分量分析 旨在利用降维的思想 把多个指标转换为少数的几个综合指标 主成分分析是一种简化数据集的技术 它是一个线性变换 这个线性变化把数据变换
  • Dialog DA14585+Sensirion SHT3X+SGP30环境温湿度检测设计

    好记性不如烂笔头 既然不够聪明 就乖乖的做笔记 温故而知新 Phosphor IOT Module是以DA14585作为主控的用于环境监测的评估板 DA14585是符合Bluetooth 5 0标准 16M 32位ARM Cortex M0
  • 学习Redis(持续更新...)

    文章目录 前言 一 redis入门 二 10大数据类型 1 字符串String 2 列表list 3 哈希表Hash 4 集合set 5 有序集合zset sorted set 6 位图bitmap 7 基数统计HyperLogLog 8
  • springboot 2.0多模块标准父类pom文件,别再问问什么找不到主类了,照着个写就行

    标准如下
  • ECharts动态加载数据绘制折线图

    Echarts动态加载数据绘制折线图 ECharts 引入ECharts 步骤 连接数据接口 动态加载图表 动态加载数据 整体代码 折线图绘制 总结 绘制多个图表的方法 ECharts 纯Javascript的图表库 支持各种图表的绘制 下
  • 区块链(肖臻笔记)

    区块链的技术与应用 比特币 密码学基础 比特币的数据结构 共识协议和系统实现 挖矿算法和难度调整 比特币的脚本 软分叉和硬分叉 匿名和隐私保护 以太坊 概述 基于账户的分布式账本 数据结构 状态树 交易树 收据树 ghost协议 挖矿 me
  • 初识EMC元器件(四)——共模电感选型及应用

    通过上一篇文章 共模电感的参数解读 已经对共模电感的参数有了初步的认识 那么本章将结合电路应用 一 共模电感选型步骤 共模电感滤波应用选型步骤 确定电路性质 电气参数 滤波频段 电感参数 主要需要考虑的参数有 电感感量 额定电流 额定电压
  • 前端基础2——CSS样式

    文章目录 一 使用方式 1 1 内联方式 1 2 内部方式 1 3 外部导入方式 推荐 二 选择器类型 2 1 元素选择器 2 2 ID选择器 2 3 类选择器 2 4 派生选择器 三 常用属性 3 1 内边距和外边距 3 2 文本 3 3
  • 转置卷积/逆卷积

    转置卷积作用 上采样 原理 卷积过程 step1 滑动窗口非常低效 我选择等效矩阵 相应位置相乘再相加 得到输出feature map step2 展平 得到矩阵i step3 把每一个等效矩阵展平为列向量 得到矩阵c step4 矩阵i和
  • vue中粘贴板clipboard的使用方法

    安装clipboard npm install clipboard save 在模板文件中引入 import Clipboard from clipboard 具体使用 这里我用的表格
  • 开发遇到问题全记录【增量】

    1 MyEclipse内部启动tomcat jar包冲突 在
  • 计算机文化基础-计算思维

    文章目录 计算思维 计算思维基础 计算思维定义 计算思维本质 计算思维特征 计算思维的基本问题 计算思维的基本方法 计算思维的应用 计算思维 关于计算机的说法很多 但就计算机科学来讲 计算机科学家在用计算机解决问题时形成的特有思维方式和解决
  • 三、对象与类

    1 面向对象程序设计概述 面向对象 OOP 是由对象组成的 每个对象包含对用户公开的特定功能部分和隐藏的实现部分 在OOP中 不必关心对象的具体实现 只要能满足用户的需求即可 类与对象概述 类 是构造对象的模板或蓝图 由类构造对象的过程称为
  • 什么是IoT数字孪生?

    数字孪生是资产或系统的实时虚拟模型 它使用来自连接的物联网传感器的数据来创建数字表示 数字孪生允许您从任何地方实时监控设备 资产或流程 数字孪生用于多种目的 例如分析性能 监控问题或在实施之前运行测试 从物联网数字孪生中获得的见解使用户能够
  • curl get post传参说明

    一 get请求 方式一 多个参数间用 连接 curl http 127 0 0 1 8080 api send type 1 mobile 13111111111 apikey sdfsdfdfs code 1234 方式二 url用单引号
  • 【云计算与大数据技术】虚拟化简介及虚拟化的分类讲解(图文解释 超详细)

    一 虚拟化简介 1 什么是虚拟化 虚拟化是指计算机元件在虚拟的基础上而不是在真实的 独立的物理硬件基础上运行 这种以优化资源 简化软件的重新配置过程为目的的解决方案就是虚拟化技术 虚拟化架构就是在一个物理硬件机器上同时运行多个不同应用的独立
  • sklearn-多元线性回归

    sklearn 多元线性回归 和简单线性回归使用单一解释变量和单一系数不同 多元线性回归使用任意数量的解释变量 每个解释变量对应一个系数 用于线性回归的模型也可以被表示为向量计法 多元线性回归 Y X Y是一个由训练实例响应变量组成的列向量