线性回归 —— 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竟然卖的大部分珍珠是人…

Java @Override注解

Java 中 Override 注解是用来指定方法重写的,只能修饰方法并且只能用于方法重写,不能修饰其它的元素。它可以强制一个子类必须重写父类方法或者实现接口的方法。 使用 Override 注解示例代码如下: public class Person {private String nam…

博弈论 —— python

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

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

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

cv2.imread()返回none时应如何解决

如果你通过cv2.imred读取图片的路径中含有中文,并且造成这个错误的话,那么主要是因为路径中还有中文造成的,解决方式请参考如下: import cv2 import numpy as np # 读取中文路径 def cv_imread(Path):cv_imgcv2.imdecode(np.from…

Java @Deprecated注解

Java 中 Deprecated 可以用来注解类、接口、成员方法和成员变量等,用于表示某个元素(类、方法等)已过时。当其他程序使用已过时的元素时,编译器将会给出警告。 使用 Deprecated 注解示例代码如下: Deprecated public…

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

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

K-means聚类 —— matlab

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

Java @SuppressWarnings注解

J2SE提供的最后一个注解是SuppressWarnings。该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默。 SuppressWarnings注解允许您选择性地取消特定代码段(即,类或方法)中的警告。其中的想法是当您看…

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

一、什么是物联网?物联网的概念由凯文阿什顿(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 计算综合评分 …

Java @SafeVarargs注解

在介绍 SafeVarargs 注解用法之前,先来看看如下代码: public class HelloWorld {public static void main(String[] args) {// 传递可变参数,参数是泛型集合display(10, 20, 30);// 传递可变参数,参数是非泛型集合display("…

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集合…

Java @FunctionalInterface注解

FunctionalInterface 就是用来指定某个接口必须是函数式接口,所以 FunInterface 只能修饰接口,不能修饰其它程序元素。 函数式接口就是为 Java 8 的 Lambda 表达式准备的,Java 8 允许使用 Lambda 表达式创建函数式接口的实例,因此…

灰色关联与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 包中找到。…