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

news2025/1/22 9:12:55

为什么要做数据归一化

一、数据归一化:

1.最值归一化
2.均值方差归一化
import numpy as np

X = 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 np

X = 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 StandardScaler

iris = 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 KNeighborsClassifier

knn_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 np


class SimpleLinearRegression:
    def __init__(self):
        self.a_ = None
        self.b_ = None
        self.x_mean = None
        self.y_mean = None

    def 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) ** 2
        self.a = num / d
        self.b = self.y_mean - self.a * self.x_mean
        return self

    def predict(self, x_test):
        return self.a * x_test + self.b

moduel_selection.py

import numpy as np


def 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_ratio
    test_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_test

from sklearn.neighbors import KNeighborsClassifier

knn = KNeighborsClassifier()

draft.py

import random

random.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.0
    d = 0.0
    for i in range(len(x)):
        num+=(x[i]-x_mean)*(y[i]-y_mean)
        d+=(x[i]-x_mean)**2
    a = num/d
    b = y_mean-a*x_mean
    return a,b

lin_fit(x,y)

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

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

七、线性回归模型评优

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])

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.coloradmin.cn/o/1384142.html

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

相关文章

Mr_HJ / form-generator项目学习-增加自定义的超融组件(一)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/n…

【python playwright 安装及验证】

python playwright pip install playwright pip install playwright -i http://mirrors.aliyun.com/pypi/simple/ playwright codegen -o script.py -b chromium --ignore-https-errors --viewport-size “2560,1440” --proxy-server “http://100.8.64.8:60497” https://w…

基于Docker的Nginx的安装与配置

基于Docker的Nginx的安装与配置 1 为Nginx创建一个容器1.1 学习docker run1.2 通过docker run为Nginx创建并启动一个容器 2 配置Nginx2.1 学习docker的bind mount技术2.2 在Nginx容器中找到想修改的文件所在的目录2.2.1 认识nginx.conf文件2.2.2 访问Nginx服务&#xff0c;默认…

光猫(无限路由器)插入可移动硬盘搭建简易版的NAS

1.场景分析 最近查询到了许多有关NAS的资料&#xff0c;用来替代百度云盘等确实有很多优势&#xff0c;尤其是具有不限速&#xff08;速度看自己配置&#xff09;、私密性好、一次投入后续只需要电费即可等优势。鉴于手上没有可以用的资源-cpu、机箱、内存等&#xff0c;查询到…

嵌入式软件面试之程序在存储器中的分布

Hi, 大家好&#xff0c;今天阿目分享的是一个嵌入式软件面试的常见问题&#xff0c;内存分布或者说程序在内存中的布局&#xff0c;我们写的程序是按照怎么的准则放在内存中的&#xff1f; 一般有操作系统的嵌入式设备&#xff0c;都会有一个Bootloader, 它负责在上电后初始化…

ubuntu18.04 TensorRT 部署 yolov5-7.0推理

文章目录 1、环境配置2、推理部分2.1、检测2.2、分类2.3、分割2.4、INT8 量化 1、环境配置 链接: TensorRT cuda环境安装 2、推理部分 下载yolov5对应版本的包 https://github.com/wang-xinyu/tensorrtx/tree/master/yolov5 2.1、检测 1、源码模型下载 git clone -b v7.0 …

算法通关村第十六关—滑动窗口与堆结合(黄金)

滑动窗口与堆结合 堆与滑动窗口问题的结合 LeetCode239给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k个数字。滑动窗口每次只向右移动一位&#xff0c;返回滑动窗口中的最大值。  对于最大值、K个最大这种场…

Multi-View-Information-Bottleneck

encoder p θ ( z 1 ∣ v 1 ) _θ(z_1|v_1) θ​(z1​∣v1​)&#xff0c;D S K L _{SKL} SKL​ represents the symmetrized KL divergence. I ˆ ξ ( z 1 ; z 2 ) \^I_ξ(z_1; z_2) Iˆξ​(z1​;z2​) refers to the sample-based parametric mutual information estimatio…

原子类-入门介绍和分类说明、基本类型原子类

Atomic翻译成中文是原子的意思。在化学上,我们知道原子是构成一般物质的最小单位,在化学 反应中是不可分割的。在我们这里Atomic是指一个操作是不可中断的。即使是在多个线程一起执 行的时候,一个操作一旦开始,就不会被其他线程干扰。 基本类型原子类 AtomicInteger:整…

Modelsim10.4安装

简介&#xff08;了解&#xff0c;可跳过&#xff09; modelsim是Mentor公司开发的优秀的HDL语言仿真软件。 它能提供友好的仿真环境&#xff0c;采用单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术和单一内核仿真技术&#xff0c;编译仿真速…

P5461 赦免战俘题解

题目 现有2n2n(n≤10) 名作弊者站成一个正方形方阵等候kkksc03的发落。kkksc03决定赦免一些作弊者。他将正方形矩阵均分为4个更小的正方形矩阵&#xff0c;每个更小的矩阵的边长是原矩阵的一半。其中左上角那一个矩阵的所有作弊者都将得到赦免&#xff0c;剩下3个小矩阵中&…

【存储过程和存储函数】MySQL

存储过程和存储函数 一、实验目的 掌握通过SQL语句CREATE PROCEDURE创建存储过程的方法。 掌握使用SQL语句CALL调用存储过程的方法。 掌握使用SQL语句ALTER PROCEDURE修改存储过程的方法。 掌握使用SQL语句DROP PROCEDURE删除存储过程的方法。 掌握使用CREATE FUNCTION创建…

信息检索速通知识点

仅仅是我自己能想到的对这个分类的一个记忆。欢迎指正 首先&#xff0c;最重要的一点&#xff0c;什么是信息检索&#xff1f; 信息检索是从大规模无规则的数据中&#xff08;主要是文档&#xff09;中查询用户所需要的信息的过程。 然后&#xff0c;信息检索有哪几种索引呢&am…

机器人行业概况(2)

上篇已经介绍过关于机器人的定义以及分类&#xff0c;下面来看看机器人产业市场规模。 二、国内机器人产业市场规模 中国机器人产业在国家智能制造相关政策的引导下蓬勃发展。在新冠肺炎疫情防控期间&#xff0c;消毒、配送、测温、巡检等各类机器人的“火线上岗”&#xff0…

对写文章的想法

一些思考 思考初心现在错觉想说的话 最后 思考 在CSDN里面写文章已经快半年了啊&#xff0c;虽然更得不多&#xff0c;但每一篇都花费很多时间&#xff0c;写的时候能帮自己查漏补缺&#xff0c;这边找找资料补充一下&#xff0c;都能去拓展自己的知识面&#xff0c;让自己的文…

JDK8终将走进历史,Oracle宣布JDK继续免费

目录 前言Oracle 已免费提供 JDKOracle Java SE 产品最新动态 为什么业界中用JDK8那么多Java SE 8 公共更新结束总结 前言 今天想到上个月无意中听闻到的一句话&#xff1a;JDK8之后收费了&#xff0c;所以大家都用JDK8。当时只觉得这个话说得不对&#xff0c;但因为和说话的人…

基于Java SSM框架实现学生成绩管理系统项目【项目源码+论文说明】

基于java的SSM框架实现学生成绩管理系统演示 摘要 学生成绩是高校人才培养计划的重要组成部分&#xff0c;是实现人才培养目标、培养学生科研能力与创新思维、检验学生综合素质与实践能力的重要手段与综合性实践教学环节。而学生所在学院多采用半手工管理学生成绩的方式&#…

代码随想录——回溯

系列文章目录 代码随想录——回溯 文章目录 系列文章目录概述组合组合组合III电话号码的字母组合组合总和组合总和II 分割分割回文串** 复原ip地址 子集子集子集II 概述 回溯的本质就是递归遍历&#xff0c;但在完成某一条路之后会撤回到上一层&#xff0c;然后重新选择另一条…

V2022全栈培训笔记(WEB攻防49-WEB攻防-通用漏洞业务逻辑水平垂直越权访问控制脆弱验证)

第49天 WEB攻防-通用漏洞&业务逻辑&水平垂直越权&访问控制&脆弱验证 知识点&#xff1a; 1、水平越权同级用户权限共享 2、垂直越权-低高用户权限共享 3、访问控制-验证丢失&取消验证 4、脆弱验证-Cookie&Token&Jwt等 #前置知识&#xff1a; 1、…