机器学习——几个线性模型的简介

目录

形式

假设

一元回归例子理解最小二乘法

多元回归

广义线性回归

对数线性回归

逻辑回归

线性判别分析


形式

        线性说白了就是初中的一次函数的一种应用,根据不同的(x,y)拟合出一条直线以预测,从而解决各种分类或回归问题,假设有 n 个属性(自变量),xi 为 x 在第 i 个属性上的取值,则其形式为:

        模型有系数 \beta 0 、 \beta 1 、...以及误差项 \varepsilon,可写为:

 

假设

        线性回归拟合有一些重要的假设,包括:

  1. 因变量和自变量之间存在线性关系。
  2. 样本相互独立。
  3. 自变量之间不存在自相关。
  4. 误差项是独立且服从正态分布的随机变量。
  5. 不存在异方差现象。

一元回归例子理解最小二乘法

        拿一元线性回归举例(一个自变量一个因变量):

        机器学习过程中我们的目标是最小化残差平方和来估计模型系数的值,均方误差对应了常用的“欧氏距离”(Euclidean distance),目标函数如下:

 (SSE就是上方的\varepsilon

        希望误差之和越小越好,就要对目标函数的\beta 0\beta 1 求偏导使得偏导为0,该目标函数可取最值(这部分就涉及高数的内容了):

\frac{\partial SSE}{\partial \beta 0}=0 

\frac{\partial SSE}{\partial \beta 1}=0

        得到最优解: 

多元回归

        假设有 n 个样例,m个属性,如下,每个列向量是一个属性所有样本的取值

         注意,这里矩阵X的第一列为1,即最终的常数项

         此时有 y=X\hat{\beta }+\varepsilon,X 为矩阵,y 与 β 为列向量(理解为矩阵也一样),做乘法

        上面残差由以下公式得到

        推导泛用性不大,对于过程有兴趣的可参见图片源的文章:多元线性回归(Multiple Linear Regression)详解,附python代码 - 知乎 

        python 中 linear_model 的 LinearRegression 可实现该方法

        数据准备:

# Multiple Linear Regression# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd# Importing the dataset
dataset = pd.read_csv('50_Startups.csv')
X = dataset.iloc[:, :4].values
y = dataset.iloc[:, 4].values
print(X)
print(y)# 前四列为特征
[[165349.2 136897.8 471784.1 'ShangHai'][162597.7 151377.59 443898.53 'BeiJing'][153441.51 101145.55 407934.54 'GuangZhou']
...
[0.0 135426.92 0.0 'BeiJing'][542.05 51743.15 0.0 'ShangHai'][0.0 116983.8 45173.06 'BeiJing']]# 最后一列为实际值y
[192261.83 191792.06 191050.39 182901.99 166187.94 156991.12 156122.51155752.6  152211.77 149759.96 146121.95 144259.4  141585.52 134307.35132602.65 129917.04 126992.93 125370.37 124266.9  122776.86 118474.03111313.02 110352.25 108733.99 108552.04 107404.34 105733.54 105008.31103282.38 101004.64  99937.59  97483.56  97427.84  96778.92  96712.896479.51  90708.19  89949.14  81229.06  81005.76  78239.91  77798.8371498.49  69758.98  65200.33  64926.08  49490.75  42559.73  35673.4114681.4 ]

        分类数据处理: 

# Encoding categorical data
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder = LabelEncoder()
# OneHotEncoder只能处理数值型变量,对于字符型变量需要使用LabelEncoder()转化
X[:, 3] = labelencoder.fit_transform(X[:, 3]) # 用数值取代类别数据
X[:, 3]
onehotencoder=OneHotEncoder(sparse=False).fit_transform(X[:, 3].reshape(-1,1))
# ohe在对数组进行变换的时候可能需要reshape,分别代表1个样例(一行)还是1个特征(一列)
onehotencoderarray([[0., 0., 1.],[1., 0., 0.],[0., 1., 0.],...[1., 0., 0.],[0., 0., 1.],[1., 0., 0.]])

        线性回归对于离散值,若有序,则进行连续化,否则转化为 k 维向量

X =np.hstack((X[:,:-1],onehotencoder))
X# # Avoiding the Dummy Variable Trap 避免虚拟变量陷阱,剔除第一列变量
# X = X[:, 1:]
# 这部分待补充

        分割测试集训练集:

# Splitting the dataset into the Training set and Test set
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, random_state = 0)X_train, X_test, y_train, y_test

        标准化

from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)
sc_y = StandardScaler()
y_train = sc_y.fit_transform(y_train.reshape(-1,1))
X_train,X_test,y_train

        建模 

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)print(regressor.coef_) # 系数
print(regressor.intercept_) # 截距
print(regressor.score(X_train, y_train))[ 7.73467193e-01  3.28845975e-02  3.66100259e-02  8.66383692e+01-8.72645791e+02  7.86007422e+02]42467.5292485530950.9501847627493607

        y 的预测值:

y_pred = regressor.predict(X_test)
y_predarray([103015.20159796, 132582.27760816, 132447.73845174,  71976.09851258,178537.48221055, 116161.24230165,  67851.69209676,  98791.73374687,113969.43533012, 167921.0656955 ])

广义线性回归

        假设 y 与 x 不是线性关系,但 y 的变体 g(y) 与 x 是线性关系,则取反函数有

        y=g^{-1}(b+\omega x)

对数线性回归

        实际是广义线性回归的一个特例,简单形式为:

        \ln y=b+\omega x

        核心在于可以用线性关系的拟合表示出非线性的关系

逻辑回归

        逻辑回归将回归应用于分类问题,对于二分类问题,有单位跃迁函数

        0与1是两个不同类别,而0.5是分界线,划分了两种不同类别,其性质不好

        于是用以下 Sigmoid(逻辑函数)函数代替,可以将y的值限制在0-1之间

        图像如下,函数单调可微,任意阶可导,有良好的数学性质

        其中

z=\omega x+b 

        则有

y=\frac{1}{1+e^-{^{(\omega^{T} x+b)}}} 

        为什么要这样做呢?因为假设在普通的线性模型中使用 x 预测 y,是一条斜线,难以达到我们想要的(取0或1)取值。因此我们先使用 x 对 z 进行线性拟合,再使用 Sigmoid 函数将 z 的取值限制在 0-1 上

        此外,由于该函数可以写为

\ln (\frac{y}{1-y})=\omega ^{T}x+b

        称左边的式子其为对数几率,其中 y / (1 - y) 则为 几率(odds),表示了 x 取 1 的相对可能性。y 为样本 x 作为正例的概率,那么 1-y 则为样本 x 作为反例的概率,由此用线性模型逼近真实样本的对数几率,可在需要使用概率进行计算分析的情况提供便利,该算法优点:

  • 无需事先假设数据分布
  • 可得到 类别的近似概率预测
  • 可直接应用现有数值优化算法求取最优解

线性判别分析

        LDA是一种将数据降维的方法,对于这部分的数学逻辑比较复杂,暂时了解了一下原理

        宗旨:找到一条线,使得所有样例的点的映射,使得同类别的点方差最小,不同类别方差最大,而衡量的标准是利用方差和协方差——不同类样例的投影点尽可能远,其矩阵协方差应该越大,而同类投影近,矩阵的方差应该越小

        关于数学推导看得有点勉强。。有兴趣请自行搜寻

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

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

相关文章

Java异常入门

目录 前言 异常 什么是异常 异常(Exception)和错误(Error) 异常的处理 异常的作用 前言 我们用一个简单情形引入异常: class Devide{public int divide(int a ,int b ){return a / b ;} }public class Main{pu…

大话设计模式之状态模式

状态模式是一种行为设计模式,它允许对象在其内部状态发生变化时改变其行为。在状态模式中,对象将其行为委托给当前状态对象,从而在不同的状态下执行不同的行为,而不必在对象自身的代码中包含大量的条件语句。 通常,状…

JAVAEE之JavaScript(WebAPI)

1.WebAPI 背景知识 JS 分成三个大的部分 ECMAScript: 基础语法部分( JS 基础语法主要学的是 ECMAScript, ) DOM API: 操作页面结构 BOM API: 操作浏览器 WebAPI 就包含了 DOM BOM. 2.API API 是一个更广义的概念 . 而 WebAPI 是一个更具体的…

matlab使用教程(32)—求解偏微分方程(3)

1求解 PDE 方程组 此示例说明由两个偏微分方程构成的方程组的解的构成,以及如何对解进行计算和绘图。 以如下 PDE 方程组为例 要在 MATLAB 中求解该方程,您需要对方程、初始条件和边界条件编写代码,然后在调用求解器pdepe 之前选择合适的解…

数据转换 | Matlab基于GASF格拉姆角和场一维数据转二维图像方法

目录 效果分析基本介绍程序设计参考资料获取方式 效果分析 基本介绍 基于GASF(Gramian Angular Summation Field)的方法,将一维数据转换为二维图像的步骤描述 标准化数据: 首先,对一维时序数据进行标准化处理&#xf…

【软件工程】详细设计(二)

这里是详细设计文档的第二部分。前一部分点这里 4. 学生端模块详细设计 学生端模块主要由几个组件构成:学生登录界面,成绩查询界面等界面。因为学生端的功能相对来说比较单一,因此这里只给出两个最重要的功能。 图4.1 学生端模块流程图 4.…

SVD图像处理(MATLAB)

使用SVD处理图像模拟演示 参考文献 https://github.com/matzewolf/Image_compression_SVD/blob/master/svd_compress.m MATLAB代码 clc; clearvars; close all;A_orgimread("lena256.bmp"); compr20; A_orgdouble(A_org);A_red svd_compress( A_org, compr ); s…

Kimi精选提示词,总结PPT内容

大家好,我是子云,最近真是觉得Kimi这个大模型,产品体验很棒,能力也是不错,感觉产品经理用心了。 发现一个Kimi 一个小技巧,可以学习到很多高级提示词。 Kimi输入框可以配置常用提示词,同时也可…

C++算法——二分法查找

一、二分查找算法思想和模版 1.算法思想 2.细节处理 3.模板 二、二分查找 1.链接 704. 二分查找 - 力扣(LeetCode) 2.描述 3.思路 先从最经典的题目去切入,思路就是二分查找,这里我们认为,目标值既可以看作为左部…

Twitter Api查询用户粉丝列表

如果大家为了获取实现方式代码的话可能要让大家失望了,这边文章主要是为了节省大家开发时间,少点坑。https://api.twitter.com/2/users/:id/followers ,这个接口很熟悉吧,他是推特提供的获取用户关注者(粉丝&#xff0…

STM32-04基于HAL库(CubeMX+MDK+Proteus)中断案例(按键中断扫描)

文章目录 一、功能需求分析二、Proteus绘制电路原理图三、STMCubeMX 配置引脚及模式,生成代码四、MDK打开生成项目,编写HAL库的按键检测代码五、运行仿真程序,调试代码 一、功能需求分析 在完成GPIO输入输出案例之后,开始新的功能…

Node.js环境调用百度智能云(百度云)api鉴权认证三步走

方式一 :Postman脚本的方式生成v1版本的认证字符串 Postman脚本下载 下载Postman pre-request Script 设置 Authorization 示例脚本 方式二:在线签名工具生成 (试用于验证编程字符串签名是否有错误) 签名计算工具 https://cloud.baidu.com/signature/index.html …

使用libibverbs构建RDMA应用

本文是对论文Dissecting a Small InfiniBand Application Using the Verbs API所做的中英文对照翻译 Dissecting a Small InfiniBand Application Using the Verbs API Gregory Kerr∗ College of Computer and Information ScienceNortheastern UniversityBoston, MAkerrgccs…

HbnnMall电子商城系统介绍(功能与技术栈)

今天在看我个人网站上的文章时,看到了曾经在2020年自己开发的电商系统。那时我已经入职小米有一段时间了,基本已经对各个业务线,各种业务知识有了系统性的了解和学习,所以想自己动手写一个电商系统,以便进一步提高自己…

ElasticSearch7.8的下载与安装和Kibana 7.8.0工具使用安装

1、ElasticSearch7.8.0下载 elasticsearch: 官方下载地址:https://www.elastic.co/cn/downloads/elasticsearch 链接: https://pan.baidu.com/s/1wAKQoB3nhLhcnBlPfVOLxQ 提取码: t83n kibana: 链接: https://pan.baidu.com/s/156aD9zDdvUv8LFgDEIPoSw 提取码:…

云存储中常用的相同子策略的高效、安全的基于属性的访问控制的论文阅读

参考文献为2022年发表的Efficient and Secure Attribute-Based Access Control With Identical Sub-Policies Frequently Used in Cloud Storage 动机 ABE是实现在云存储中一种很好的访问控制手段,但是其本身的计算开销导致在实际场景中应用收到限制。本论文研究了…

(2024)Ubuntu源码安装多个版本的opencv并切换使用

本人工作会用到x86_64的opencv和aarch64的opencv,所以写下来备忘自用 一、源码编译安装 依赖库安装: sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev o…

上位机图像处理和嵌入式模块部署(qmacvisual图像清晰度)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 做过isp的同学都知道,图像处理里面有一个3A,即自动曝光、自动白平衡和自动对焦。其中自动对焦这个,就需要用输入…

HarmonyOS NEXT应用开发之PersistentStorage:持久化存储UI状态

前两个小节介绍的LocalStorage和AppStorage都是运行时的内存,但是在应用退出再次启动后,依然能保存选定的结果,是应用开发中十分常见的现象,这就需要用到PersistentStorage。 PersistentStorage是应用程序中的可选单例对象。此对…

Vue的学习之旅-part1

Vue的学习之旅-part1 vue介绍vue读音编程范式ES6中不用var声明变量vue的声明、初始化传参使用data中数据时要用this指向 vue中的语法糖MVVM在Vue中, MVVM的各层的对应位置 方法、函数的不同之处 vue介绍 vue读音 Vue 读作 /vju:/ 不要读成v u e Vuex 的x读作叉 不…