线性回归 —— python

目录

一、基本概念

二、概念的数学形式表达

三、确定w和b

1.读取或输入数据

2.归一化、标准化

2.1 均值

2.2 归一化

2.3 标准化

3.求解w和b

1.直接解方程

2.最小二乘法(least square method)求解:

4. 评估回归模型

四、sklearn中的线性回归

1.对数据进行解析

2.对原始值和预测值进行绘图

3.绘制残差图


一、基本概念

线性(linear):

指量与量之间按比例、成直线的关系,在空间和时间上代表规则和光滑的运动,一阶导数为常数

非线性(non-linear):

指不按比例、不成直线的关系,代表不规则的运动和突变,一阶导数不为常数。

一个线性的例子:

数据:工资和年龄(2个特征)

目标:预测银行会贷款给我多少钱(标签)

考虑:工资和年龄都会影响最终银行贷款的结果,那么他们各自有多大的影响呢?(参数)

通俗的解释

x1,x2就是我们的两个特征(年龄、工资),y是银行最终会借给我们多少钱

找到最合适的一条线(想象一个高维)来最好的拟合我们的数据点

数学形式来了

二、概念的数学形式表达

给定数据集

数据的矩阵形式:

 线性模型(linear model)试图学得一个通过属性组合的线性组合来进行预测的函数,即

向量形式写成:   

线性回归(linear regression)试图学得一个线性模型以尽可能准确地预测实值输出标记

三、确定w和b

对离散属性

若属性间存在“序”关系,可通过连续化将其转化为连续值。

若属性间不存在“序”关系,则转化为k维向量。

1.读取或输入数据

#导入相关库 numpy pandas
import pandas 
import numpy
#如果没有请安装哦,如下
# pip install pandas 
# pip install numpy

有库了,我们才可以导入数据哇

首先我们先看看csv数据的导入

import pandas as pd文件
data = pd.read_csv(r'路径', encoding='gbk')
#读取csv数据方式 pd.read_csv
# encoding='gbk' 定义编码方式 常用只有两种 utf8 和 gbk 按需定义即可#下面这种读取是显示没有第一列的数据 index_col=0 python中第0列也就是实际的第1列
#reset_index(drop=True)  True表示执行此删除命令
data= pd.read_csv(r"路径", encoding='gbk', index_col=0).reset_index(drop=True)

 读取数据后得分出和为X,何为Y

X = data.iloc[:,0:4]  # 0到3列所有的数据也就是实际的1到4列
Y = data.iloc[:, 5]  # 第5列所有的数据也就是实际的第6列

 接下来我们看看自己建立矩阵的数据读取方式

import numpy as np
a = np.array([1,2,3])
print(a)
b = np.array([[1,2],[2,3]])
print(b)

返回:

 

 说到矩阵了,就顺便说一下

创建矩阵的相关知识:mat()           创建矩阵array()         将列表转换为数组,可选择显式指定dtypearange()        range的numpy版,支持浮点数linspace()      类似arange(),第三个参数为数组长度zeros()         根据指定形状和dtype创建全0数组ones()          根据指定形状和dtype创建全1数组empty()         根据指定形状和dtype创建空数组(随机值)eye()           根据指定边长和dtype创建单位矩阵

2.归一化、标准化

2.1 均值

# 在这里我们可以直接用numpy中的mean函数计算
numpy。mean()

顺便介绍一下其他的numpy中的相关常用函数:
sum 求和
cumsum 求前缀和
mean 求平均数
std 求标准差
var 求方差
min 求最小值
max 求最大值
argmin 求最小值索引
argmax 求最大值索引

 要想确定w和b,首先要视情况决定是否需要对数据进行归一化或标准化

2.2 归一化

#范围归一化 此方法只适用一维数据
import numpy as np
data = np.asarray([1,5,3,8,4])
for x in data:x = float(x - np.min(data))/(np.max(data)- np.min(data))print(x)
# sklearn中的范围归一化函数MinMaxScaler函数可适用多维数据
from sklearn import preprocessing   
import numpy as np  X = np.array([[ 1., -1.,  2.],  [ 2.,  0.,  0.],  [ 0.,  1., -1.]])  min_max_scaler = preprocessing.MinMaxScaler()  
x = min_max_scaler.fit_transform(X)

2.3 标准化

#标准化
import numpy as npcc = np.array([[1,2,3],[4,5,6]]) #创建矩阵
print(cc) #输出矩阵cc_mean = np.mean(cc, axis=0)  #axis=0,表示按列求均值 ——— 即第一维,每一列可看做一个维度或者特征
cc_std = np.std(cc, axis=0) #xis=0,表示按列求标准差
cc_zscore = (cc-cc_mean)/cc_std   #直接计算,对数组进行标准化,一定要注意维度
print(cc_zscore) #输出结果
#sklearn中的标准化
from sklearn.preprocessing import StandardScalerscaler = StandardScaler()        
cc_zscore = scaler.fit_transform(cc)
print(cc_zscore) #输出结果

3.求解w和b

1.直接解方程

N = data.shape[0]
X_mean = np.mean(X) #求均值
X_mean = np.array(X_mean) #转为数组
Y_mean = np.mean(Y) #求均值
Y_mean = np.array(Y_mean) #转为数组A = np.dot(X.T,X)-N*np.dot(X_mean.T,X_mean)
C = np.dot(X.T,Y)-N*np.dot(X_mean.T,Y_mean)
B = np.dot(np.linalg.inv(A),C) #系数
BB = Y_mean - np.dot(X_mean,B.T) #常数
YY = np.dot(X,B.T)+BB #Y的估计值

2.最小二乘法(least square method)求解:

把数据集D表示为一个m*(d+1)大小的矩阵X,其中每行对应于一个示例,改行前d个元素对应于示例的d个属性值,最好一个元素恒置为1,即

x = np.array([[1,5,8],[2,5,8],[1,4,6]])
Y = np.array([2,5,3])
b = np.ones(3)
X = np.insert(x, 3, values=b, axis=1)

当X^TX 为满秩矩阵(full-rank matrix) 或正走矩阵(positive definite matrix) 时,令

得到

w=np.dot(np.dot(np.linalg.inv(np.dot(X.T,X)),X.T),Y)

 其中(X^TX)^-l是矩阵(X^TX)的逆矩阵.令xi = (xi ,l) ,则最终学得的多元线性回归模型为

4. 评估回归模型

#离差平方和
S = np.var(Y)
#回归平方和
U = np.var(YY)
#剩余平方和
Q = S - U
#复可决系数
R2 = U/S
#负相关系数
R = np.sqrt(U/S)
#回归均方
# n= X_mean 的个数
UU = U/n
#剩余均方
# N= Y的个数
QQ = Q/(N-n-1)
#剩余标准差
s = np.sqrt(QQ)
#方程显著性检验值
F = UU/QQ

四、sklearn中的线性回归

1.对数据进行解析

from sklearn import linear_model
import numpy as np
import pandas as pd
#使用最小二乘线性回归进行拟合,导入相应的模块
lr=linear_model.LinearRegression()
data = pd.read_csv(r'D:\桌面\A.csv', encoding='gbk')
X = data.iloc[:,0:4]  
Y = data.iloc[:, 5]  
X_train,X_test,Y_train,Y_test=train_test_split(X, Y, test_size=0.2, random_state=0)
lr.fit(X_train,Y_train)  #拟合
y=lr.predict(X)       #得到预测值集合y
coef=lr.coef_                #获得该回该方程的回归系数与截距
intercept=lr.intercept_
print("预测方程回归系数:",coef)
print("预测方程截距:",intercept)
score=lr.score(X_test,Y_test)    #对得到的模型打分
print('模型的预测分',score)

2.对原始值和预测值进行绘图

from matplotlib import pyplot as plt
plt.plot(range(1,len(Y)+1),Y)
plt.plot(range(1,len(Y)+1),y)
plt.show()

3.绘制残差图

err = y - Y #求残差
plt.plot(range(1,len(Y)+1),err)
plt.show()

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

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

相关文章

审查元素找不到创建的元素_香奈儿除了珍珠,还有哪些你不知道的经典元素?答案在原文中找...

Chanel曾经说过:“没有珍珠的女人,不算是女人”珍珠是Coco永远的标志无论白天还是夜晚也无论她穿着运动服还是毛衣男装裤甚至在她人生最后的一段日子珍珠饰品都如影随形。BUT!你能相信?对珍珠如此看重的Coco竟然卖的大部分珍珠是人…

博弈论 —— python

目录 1.简介 2.算法原理 3.实例分析 1.各参数初始化 2.计算期望与实际期望 3.博弈过程 4.绘图 完整代码 1.简介 博弈论又被称为对策论(Game Theory)既是现代数学的一个新分支,也是运筹学的一个重要学科。 博弈论主要研究公式化了的激励结构间的相互作用。是研…

android应用程序 多少钱_关于APP开发你最想了解的事,开发一个APP多少钱?

当我们在进行APP开发,最关注的问题一定是APP开发的价格问题,而作为软件开发行业的从业人员,经常会遇到这样的情况:“别说这么多,你只要告诉我开发一个软件多少钱就行了”。郑州APP开发公司的确,无论我们买什…

mvc 扫描二维码跳转内部指定页面_开源神器:一个二维码,让文件传输不设限!...

大家好,我是小 G。今天给大家推荐一个在前不久火遍 GitHub 的开源项目:QRCP。从项目的命名你们应该就能大致猜测出来,这款神器的主要作用,就是能通过指定二维码,快速完成文件的传输功能。项目作者是来自意大利的一位小…

K-means聚类 —— matlab

目录 1.简介 2.算法原理 3.实例分析 3.1 读取数据 3.2 原理推导K均值过程 3.3 自带kmeans函数求解过程 完整代码 1.简介 聚类是一个将数据集中在某些方面相似的数据成员进行分类组织的过程,聚类就是一种发现这种内在结构的技术,聚类技术经常被称为…

数据线给电脑联网是什么原理_物联网孵化的产物——条码扫描器

一、什么是物联网?物联网的概念由凯文阿什顿(Kevin Ashton)于1999年被提出,即Internet of Things(IOT),也称为Web of Things。根据阿什顿的想法,计算机最终能够在没有人工干预的情况下,自主产生及收集数据,…

灰色关联法 —— matlab

目录 1.简介 2.算法详解 2.1 数据标准化 2.2 计算灰色相关系数 2.3 计算灰色关联度系数 3.实例分析 3.1 读取数据 3.2 数据标准化 3.3 绘制 x1,x4,x5,x6,x7 的折线图 3.4 计算灰色相关系数 完整代码 1.简介 对于两个系统之间的因素,其随时间或不同对象而…

灰色关联与TOPSIS法 —— matlab

目录 1.简介 2.算法详解 2.1 指标正向化及标准化 2.2 找到最大最小参考向量 2.3 计算与参考向量的相关系数 2.4 求评分 3.实例分析 3.1 读取数据 3.2 数据标准化 3.3 得到最大最小参考行 3.4 与最大值的灰色相关系数 3.5 与最小值的灰色相关系数 3.6 计算综合评分 …

mmap函数_Linux内存映射mmap原理分析

一直都对内存映射文件这个概念很模糊,不知道它和虚拟内存有什么区别,而且映射这个词也很让人迷茫,今天终于搞清楚了。。。下面,我先解释一下我对映射这个词的理解,再区分一下几个容易混淆的概念,之后&#…

灰色关联法 —— python

目录 1.简介 2.算法详解 2.1 数据标准化 2.2 计算灰色相关系数 2.3 计算灰色关联度系数 3.实例分析 3.1 读取数据 3.2 数据标准化 3.3 绘制 x1,x4,x5,x6,x7 的折线图 3.4 计算灰色相关系数 完整代码 1.简介 对于两个系统之间的因素,其随时间或不同对象而变…

arraylist线程安全吗_Java中的集合和线程安全

通过Java指南我们知道Java集合框架(Collection Framework)如何为并发服务,我们应该如何在单线程和多线程中使用集合(Collection)。话题有点高端,我们不是很好理解。所以,我会尽可能的描述的简单点。通过这篇指南,你将会对Java集合…

灰色关联与TOPSIS法 —— python

目录 1.简介 2.算法详解 2.1 指标正向化及标准化 2.2 找到最大最小参考向量 2.3 计算与参考向量的相关系数 2.4 求评分 3.实例分析 3.1 读取数据 3.2 数据标准化 3.3 得到最大最小参考行 3.4 与最大值的灰色相关系数 3.5 与最小值的灰色相关系数 3.6 计算综合评分…

spark 数据框 删除列_pandas 常用的数据处理函数

在数据分析过程中,首先就是对数据进行清洗和处理,而使用 python 进行处理的朋友们,对 pandas 包肯定是熟悉不过的了。pandas 的功能很强大,基本的数据处理操作都可以找到对应函数去使用,想全面了解的朋友可以查看相关文…

Java元注解作用及使用

元注解是负责对其它注解进行说明的注解,自定义注解时可以使用元注解。Java 5 定义了 4 个注解,分别是 Documented、Target、Retention 和 Inherited。Java 8 又增加了 Repeatable 和 Native 两个注解。这些注解都可以在 java.lang.annotation 包中找到。…

灰色预测法 —— matlab

目录 1.简介 2.算法详解 2.1 生成累加数据 2.2 累加后的数据表达式 2.3 求解2.2的未知参数 3.实例分析 3.1 导入数据 3.2 进行累加数据 3.3 求解系数 3.4 预测数据及对比 完整代码 1.简介 灰色系统理论认为对既含有已知信息又含有未知或非确定信息的系统进行预测&a…

jpa 自定义sql if_SpringBoot整合JPA实现多数据源及读写分离

SpringBoot整合JPA实现多数据源及读写分离项目地址:https://github.com/baojingyu/spring-boot-jpa-dynamic-datasource本项目使用 SpringBoot 和 SpringData JPA 实现多数据源,动态数据源的切换。前段时间写 MySQL 主从复制的技术分享,我就在…

时间序列分析简介

目录 1.引言 2.时间序列的定义 3.时间序列分析方法 (1)描述性时间序列分析 (2)统计时序分析 时序分析方法 时域分析方法 1.引言 最早的时间序列分析可以追溯到7000年前,古埃及把尼罗河涨落的情况逐天记录下来&a…

时间序列的预处理

目录 一、特征统计量 1.概率分布 2.特征统计量 二、平稳时间序列的定义 严平稳与宽平稳的关系 三、平稳时间序列的统计性 四、平稳性的重大意义 五、平稳性检验 时序图检验 自相关图检验 R绘图 一、特征统计量 平稳性是某些时间序列具有的一种统计特征要描述清楚这个…

R中‘ts‘ object must have one or more observations

错误如下: 为什么会出现,如下错误是因为我读取数据是,没有对数据进行分割,而是直接读取,然后使用的 最初读取方式为: 改变后的读取方式: 此时,再调用上面提示错误的那行代码试试&am…

Java字符编码介绍

在计算机中,任何的文字都是以指定的编码方式存在的,在 Java 程序的开发中最常见的是 ISO8859-1、GBK/GB2312、Unicode、 UTF 编码。 Java 中常见编码说明如下: ISO8859-1:属于单字节编码,最多只能表示 0~255 的字符范…