机器学习~从入门到精通(二)线性回归算法和多元线性回归

为什么要做数据归一化

一、数据归一化:

1.最值归一化
2.均值方差归一化
import numpy as npX = np.random.randint(1,100,size=100)
X = X.reshape(-1,2)
X.shape
X = np.array(X,dtype='float')
X[:,0] = (X[:,0]-np.min(X[:,0]))/(np.max(X[:,0])-np.min(X[:,0]))
X[:,1] = (X[:,1]-np.min(X[:,1]))/(np.max(X[:,1])-np.min(X[:,1]))
X

在这里插入图片描述

均值方差归一化

X = np.random.randint(1,100,size=100)
X = X.reshape(-1,2)
X = np.array(X,dtype='float')
X[:,0] = (X[:,0]-np.mean(X[:,0]))/np.std(X[:,0])
X[:,1] = (X[:,1]-np.mean(X[:,1]))/np.std(X[:,1])
X
np.std(X[:,0])
np.std(X[:,1])
np.mean(X[:,0])
np.mean(X[:,1])

在这里插入图片描述

二、数据归一化的注意事项

import numpy as npX = np.random.randint(1,100,size=100).reshape(-1,1)
X1 = np.array(X,dtype='float')
from sklearn.preprocessing import StandardScaler
std_scaler = StandardScaler()std_scaler.fit(X1) # 计算均值和方差
X_std = std_scaler.transform(X1)  # 归一化转化
X_std

在这里插入图片描述

三、鸢尾花数据归一化

import numpy as np
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaleriris = load_iris()
X= iris.data
y = iris.target
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2)
X_train.shape
std_scaler = StandardScaler()
std_scaler.fit(X_train)
std_scaler.mean_.shape
X_std_train = std_scaler.transform(X_train) #  对训练集特征进行归一化处理
X_std_test =  std_scaler.transform(X_test)  #  对测试集特征进行归一化处理
from sklearn.neighbors import KNeighborsClassifierknn_clf = KNeighborsClassifier()
knn_clf.fit(X_std_train,y_train)
knn_clf.score(X_std_test,y_test)
knn_cl1 = KNeighborsClassifier()
knn_cl1.fit(X_train,y_train)
knn_cl1.score(X_test,y_test)

在这里插入图片描述

四、knn算法总结

#  knn: 天然可以解决分类的算法
#        思想简单,效果强大
#  缺点: 效率很低 
#  缺点: 高度数据相关outlier
#  缺点: 预测的结果不具有可解释性
#  缺点: 维数灾难: 随着维度的增加,看似很相近的点,之间的距离会越来越大

五、线性回归

#  线性回归:判断数据的特征和目标值之间具有一定的线性关系
#  最简单的线性回归:样本的特征只有一个,用线性回归法进行预测,叫做简单线性回归
#  推广到样本特征有多个,多元线性回归
#  实现简单,是很多非线性模型的基础
#  结果具有很强的解释性,可以学习到一些真实世界中的知识
#   np.sum(|y` - y| )
#   np.sum((y` - y)**2)
#   损失函数
import numpy as np
import matplotlib.pyplot as plt
x = np.array([1,2,3,4,5])
y = np.array([1,3,2,3,5])
plt.scatter(x,y)
plt.axis([0,6,0,6])
plt.show()

在这里插入图片描述

#  y = a*x+b  需要计算出a和b
x_mean = np.mean(x)
y_mean = np.mean(y)
num = 0.0 # 分子
d = 0.0  #  分母
for x_i,y_i in zip(x,y):num += (x_i-x_mean)*(y_i-y_mean)d += (x_i-x_mean)**2
a = num/d
b = y_mean-a*x_mean
a
b
y_hat = a * x +b
plt.plot(x,y_hat,color='r')
plt.scatter(x,y)
plt.axis([0,6,0,6])
plt.show()

在这里插入图片描述
在这里插入图片描述

x_predict = 3.5
a*x_predict+b
%run MechainLearning/SimpleLinearRegression.py
lin_reg = SimpleLinearRegression()
lin_reg.fit(x,y)
lin_reg.predict()

在这里插入图片描述

SimpleLinearRegression.py

import numpy as npclass SimpleLinearRegression:def __init__(self):self.a_ = Noneself.b_ = Noneself.x_mean = Noneself.y_mean = Nonedef fit(self, x_train, y_train):self.x_mean = np.mean(x_train)self.y_mean = np.mean(y_train)num = 0.0  # 分子d = 0.0  # 分母for x_i, y_i in zip(x_train, y_train):num += (x_i - self.x_mean) * (y_i - self.y_mean)d += (x_i - self.x_mean) ** 2self.a = num / dself.b = self.y_mean - self.a * self.x_meanreturn selfdef predict(self, x_test):return self.a * x_test + self.b

moduel_selection.py

import numpy as npdef train_test_split(X, y, test_ratio=0.2, random_state=None):if random_state:np.random.seed(random_state)shuffle_indexs = np.random.permutation(len(X))test_ratio = test_ratiotest_size = int(len(X) * test_ratio)test_indexs = shuffle_indexs[:test_size]train_indexs = shuffle_indexs[test_size:]X_train = X[train_indexs]y_train = y[train_indexs]X_test = X[test_indexs]y_test = y[test_indexs]return X_train, X_test, y_train, y_testfrom sklearn.neighbors import KNeighborsClassifierknn = KNeighborsClassifier()

draft.py

import randomrandom.seed(666)
print(random.random())
print(random.random())
print(random.random())def random(num):pass

六、简单线性回归

# 前提:认为数据具有一定的线性关系
#  希望找到一条最佳拟合的直线方程,只针对简单线性回归(只有一个特征值)
#  y = ax+b    对于每一个样本点,在这个直线方程上都有一个预测值,预测值和真实值有一定的差距
#   我们希望这些样本到直线方程的差距之和最小#  如何计算这些差距?  |y-y~|   sqrt((y-y~)**2)
#  loss function 损失函数  希望损失函数达到最小值
from sklearn.linear_model import LinearRegression
import numpy as np
import matplotlib.pyplot as plt
x = np.array([1,2,3,4,5])
y = np.array([1,3,2,3,5])
plt.scatter(x,y)
plt.axis([0,6,0,6])
plt.show()

在这里插入图片描述

lin_reg = LinearRegression()
lin_reg.fit(x.reshape(-1,1),y)
lin_reg.coef_ # 系数
lin_reg.intercept_  # 截距
plt.scatter(x,y)
plt.plot(x,lin_reg.predict(x.reshape(-1,1)),color='r')
plt.axis([0,6,0,6])
plt.show()

在这里插入图片描述

def lin_fit(x,y):x_mean = np.mean(x)y_mean = np.mean(y)num = 0.0d = 0.0for i in range(len(x)):num+=(x[i]-x_mean)*(y[i]-y_mean)d+=(x[i]-x_mean)**2a = num/db = y_mean-a*x_meanreturn a,b

lin_fit(x,y)

def lin_fit2(x,y):x_mean = np.mean(x)y_mean = np.mean(y)num = 0.0d = 0.0
#     for i in range(len(x)):
#         num+=(x[i]-x_mean)*(y[i]-y_mean)
#         d+=(x[i]-x_mean)**2num = (x-x_mean).dot(y-y_mean)d = (x-x_mean).dot(x-x_mean)a = num/db = y_mean-a*x_meanreturn a,b

lin_fit2(x,y)
x.shape
y.shape
在这里插入图片描述

七、线性回归模型评优

from sklearn.linear_model import LinearRegression
import numpy as np
import matplotlib.pyplot as pltx = np.array([1,2,3,4,5])
y = np.array([1,3,2,3,5])lin_reg = LinearRegression()
lin_reg.fit(x.reshape(-1,1),y)lin_reg.score(x.reshape(-1,1),y)

在这里插入图片描述

线性回归模型中的误差计算

MSE mean squared error 均方误差

#  为什么均方误差中需要除以样本数量m def MSE(y_true,y_predict):return np.sum((y_true-y_predict)**2)/len(y_true)
均方根误差
from math import sqrt
def RMSE(y_true,y_predict):return sqrt(np.sum((y_true-y_predict)**2)/len(y_true))
绝对平均误差
def MAE(y_true,y_predict):return np.sum(np.absolute(y_true-y_predict))/len(y_true)

在这里插入图片描述

MSE(x,y)
RMSE(x,y)
MAE(x,y)

在这里插入图片描述

from sklearn.metrics import mean_squared_error,mean_absolute_error
mean_squared_error(x,y)
mean_absolute_error(x,y)
def r2_score(y_true,y_predict):return 1-MSE(y_true,y_predict)/np.var(y_true)
r2_score(x,y)

在这里插入图片描述

R squared error

在这里插入图片描述

八、多线线性回归

# 特征值不止一个,叫做多元线性回归
#  通过对矩阵进行转换,加一个x0维度,可以得到求出两个矩阵点乘的最小值问题
#  得到西塔的正规方程解,带入x和y就可以求出西塔
#  西塔是一个n+1 * 1 的矩阵
#  西塔0代表截距,西塔除第一个以外的元素代表系数
from sklearn.datasets import load_boston
boston = load_boston()
print(boston.DESCR)

在这里插入图片描述

boston.feature_names
x = boston.data[:,5].reshape(-1,1)
y = boston.target
x.shape
y.shape
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
x = x[y<50]
y = y[y<50]plt.scatter(x,y)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

from spectral import *
from scipy.io import loadmat#读取数据并显示
input_image = loadmat('dc.mat')['imggt']
input_image_gt = loadmat('dc.mat')['imggt'][1,:,:] 
v = imshow(input_image_gt)
v1 = imshow(input_image)
# principal_components计算图像数据的主组件,并返回一个主组件中的平均值、协方差、特征值和特征向量
pc = principal_components(input_image)
v2 = imshow(pc.cov)
#显示协方差矩阵 白色 强正协方差,深色 强负协方差,灰色 协方差接近于0
#保留至少99.9%的总图像方差
pc_0999 = pc.reduce(fraction = 0.99)
pc_0999.eigenvalues
#获取特征值
len(pc_0999.eigenvalues)#特征值数组长度为270
img_pc = pc_0999.transform(input_image)
v = imshow(img_pc[:,:,:3],stretch_all = True)

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

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

相关文章

Postgres 中文周报:Postgres Weekly 537 期

本周报由 Cloudberry Database 社区编译自英文版《Postgres Weekly》&#xff0c;译文较原文有所调整。 推荐博文 &#x1f3c6; PostgreSQL: The DBMS of the Year 2023 PostgreSQL 荣获 DB-Engines 网站 2023 年度 DBMS 冠军。DB-Engines 收集了 480 款数据库系统信息并跟踪…

机器学习笔记 - 基于OpenCV+稀疏光流的无监督运动检测

一、简述 在各种高级开源库的帮助下&#xff0c;检测固定摄像机拍摄的运动行为是轻而易举可以实现的&#xff0c;但检测移动的摄像机拍摄的移动物体的运动检测依然是一个复杂的问题。在这里&#xff0c;我们将继续基于稀疏光流&#xff0c;并检测移动的无人机相机的运动。 这里…

设计模式-传输对象模式

设计模式专栏 模式介绍模式特点应用场景传输对象模式和序列化的区别代码示例Java实现传输对象模式Python实现传输对象模式 传输对象模式在spring中的应用 模式介绍 传输对象模式&#xff08;Transfer Object Pattern&#xff09;是一种设计模式&#xff0c;用于从客户端向服务…

MT8766安卓核心板/开发板_MTK联发科4G安卓手机主板方案定制开发

MT8766采用台积电 12 nm FinFET 制程工艺&#xff0c;4*A53架构&#xff0c;Android 9.0操作系统&#xff0c;搭载2.0GHz 的 Arm NEON 引擎。提供了支持最新 OpenOS 及其要求苛刻的应用程序所需的处理能力&#xff0c;专为具有全球蜂窝连接的高移动性和功能强大的平板设备而设计…

MySQL进阶篇(五) 锁

一、概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、RAM、I/O&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问…

深入浅出Android dmabuf_dump工具

目录 dmabuf是什么&#xff1f; dmabuf_dump工具介绍(基于Android 14) Android.bp dmabuf_dump.cpp 整体架构结构如下 dmabuf_dump主要包含以下功能 前置背景知识 fdinfo 思考 bufinfo Dump整个手机系统的dmabuf Dump某个进程的dmabuf​​​​​​​ 以Table[buff…

【JVM 基础】类字节码详解

JVM 基础 - 类字节码详解 多语言编译为字节码在JVM运行Java字节码文件Class文件的结构属性从一个例子开始反编译字节码文件字节码文件信息常量池方法表集合类名 再看两个示例分析try-catch-finallykotlin 函数扩展的实现 源代码通过编译器编译为字节码&#xff0c;再通过类加载…

文件指针 FILE结构体

C语言中的文件指针是指向FILE类型结构体的指针。(也就是说 文件指针的类型就是FILE类型) 在C语言中&#xff0c;使用文件指针来操作文件。FILE类型是一个结构体类型&#xff0c;它包含了与文件相关的信息&#xff0c;例如文件位置指示器、文件读写状态等。通过文件指针&#x…

【MySQL】多表查询

文章目录 多表查询是什么&#xff1f;一、笛卡尔积&#xff08;或交叉连接&#xff09;二、多表查询分类分类1&#xff1a;等值连接 vs 非等值连接等值连接非等值连接 分类2&#xff1a;自连接 vs 非自连接分类2&#xff1a;内连接 vs 外连接 三、SQL99SQL99 实现 内连接SQL99 …

深度解析Pytest插件pytest-html

在软件开发中&#xff0c;测试报告是开发者获取测试结果和问题定位的关键工具之一。然而&#xff0c;标准的控制台输出有时难以满足我们对测试报告的需求。幸运的是&#xff0c;Pytest插件 pytest-html 提供了一种简单而强大的方式&#xff0c;可以生成漂亮、可视化的HTML格式测…

1992年-2020年ESA_CCI土地覆盖数据介绍、下载与数据分享

数据介绍 ESA CCI Land Cover是欧洲空间局&#xff08;European Space Agency&#xff0c;ESA&#xff09;的一个项目&#xff0c;其目标是生成全球土地覆盖的高质量、一致性和长期的时间序列数据&#xff0c;分辨率大约为300米。 该项目是ESA气候变化计划&#xff08;Climate…

AI大模型学习笔记二

文章目录 一、Prompt Engineering1&#xff09;环境准备 二、LangChain&#xff08;一个框架名字&#xff09;三、Fine-tuning&#xff08;微调&#xff09; 一、Prompt Engineering 1&#xff09;环境准备 ①安装OpenAI库 pip install --upgrade openai附加 安装来源 pyth…

阶段十-分布式锁

5.1 节 为什么要使用分布式锁 锁是多线程代码中的概念&#xff0c;只有当多任务访问同一个互斥的共享资源时才需要。如下图&#xff1a; 在我们进行单机应用开发&#xff0c;涉及并发同步的时候&#xff0c;我们往往采用synchronized或者lock的方式来解决多线程间的代码同步问…

远程登陆利器 ssh

文章目录 远程登陆利器 ssh登陆远程服务器指定用户名多数情况的登陆方式查看服务器的时间指定端口更多信息 远程登陆利器 ssh ssh命令是openssh套件中的客户端连接工具&#xff0c;使用加密协议实现安全的远程登录服务器&#xff0c;实现对服务器的远程管理。 官方定义为&…

ZZULIOJ 1110: 最近共同祖先(函数专题)

题目描述 如上图所示&#xff0c;由正整数1, 2, 3, ...组成了一棵无限大的二叉树。从某一个结点到根结 点&#xff08;编号是1 的结点&#xff09;都有一条唯一的路径&#xff0c;比如从10 到根结点的路径是(10, 5, 2, 1)&#xff0c; 从4 到根结点的路径是(4, 2, 1)&#xff0…

网络地图服务(WMS)详解

文章目录 1.概述2.GetCapabilities3.GetMap4.GetFeatureInfo 阅读本文之前可参考前文&#xff1a;《地图服务器GeoServer的安装与配置》与《GeoServer发布地图服务&#xff08;WMS、WFS&#xff09;》。 1.概述 经过前文的介绍&#xff0c;相信我们对WMS/WFS服务已经有了一个非…

Modbus协议学习第二篇之Modbus poll slave仿真软件初体验

软件准备 学习Modbus离不开硬件&#xff0c;好在我们可以通过仿真软件来模拟硬件&#xff0c;本篇博客就来简单介绍一下Modbus仿真软件的最基础使用方法&#xff0c;需要用到的3款仿真软件如下&#xff1a; Modbus Poll 64位 / Modbus Poll 32位&#xff08;根据自己机器位数选…

C++——map和set的基本使用

目录 一&#xff0c;关联式容器 二&#xff0c;键值对 三&#xff0c;set的使用 3.1 set介绍 3.2 set的插入和删除 3.3 set的pair 3.4 multiset 四&#xff0c;map的使用 4.1 map介绍 4.2 map实现简易字典 4.3 map实现统计次数 4.4 map的[] 五&#xff0c;使用map或…

LV.13 D11 Linux驱动移植及内核深化 学习笔记

一、设备树 1.1 设备树 设备树是一种描述硬件信息的数据结构&#xff0c;Linux内核运行时可以通过设备树将硬件信息直接传递给Linux内核&#xff0c;而不再需要在Linux内核中包含大量的冗余编码 举例&#xff1a;让LED2闪烁的代码中&#xff0c;有逻辑代码和设备代码。Li…

案例121:基于微信小程序的作品集展示系统设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…