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

目录

形式

假设

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

多元回归

广义线性回归

对数线性回归

逻辑回归

线性判别分析


形式

        线性说白了就是初中的一次函数的一种应用,根据不同的(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.mzph.cn/news/790859.shtml

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

相关文章

03原理图:接口、无线、电机、STM32主控、整体模块化设计总结

接口部分 一、TTL 转 USB 驱动电路设计 方案很多,本设计采用的芯片是 CH340E 。 该芯片内部已经集成了振荡器,不需要外部增加晶振。如果其他型号的芯片内部没有振荡器,则外面需要加一个晶振。 再看这篇笔记的时候,你可能有点懵…

蓝桥杯第十三届电子类单片机组决赛程序设计

前言 一、决赛题目 1.比赛题目 2.题目解读 二、功能实现 1.关于定时器资源 1)超声波和NE555需要的定时器资源 2)定时器2 2.单位切换 3.数据长度不足时,高位熄灭 4.AD/DA多通道的处理 5.PWM输出 6.长按功能的实现 三、完整代码演…

Qt C++ | Qt 元对象系统、信号和槽及事件(第一集)

01 元对象系统 一、元对象系统基本概念 1、Qt 的元对象系统提供的功能有:对象间通信的信号和槽机制、运行时类型信息和动态属性系统等。 2、元对象系统是 Qt 对原有的 C++进行的一些扩展,主要是为实现信号和槽机制而引入的, 信号和槽机制是 Qt 的核心特征。 3、要使用元…

三星加强Bixby智能:迈向生成式AI,抗衡谷歌Gemini

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

AI2.0时代如何快速落地AI智能应用开发,抓住时代机会

写在前面的话 当我们提到人工智能时也就是AI的时候呢,我们大多数人首先想到的可能就是像chatGPT这样的聊天机器人,这些聊天机器人通过理解,还有生成自然语言可以给我们提供一些信息,这个是AI最终的形态吗或者AI最终的形式吗&…

【STM32嵌入式系统设计与开发】——16InputCapture(输入捕获应用)

这里写目录标题 STM32资料包: 百度网盘下载链接:链接:https://pan.baidu.com/s/1mWx9Asaipk-2z9HY17wYXQ?pwd8888 提取码:8888 一、任务描述二、任务实施1、工程文件夹创建2、函数编辑(1)主函数编辑&#…

代码随想录阅读笔记-二叉树【合并二叉树】

题目 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节…

vue快速入门(四)v-html

注释很详细&#xff0c;直接上代码 上一篇 新增内容 使用v-html将文本以html的方式显示 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, …

【web】nginx+php-fpm云导航项目部署-(简版)

一、yum安装nginx yum -y install nginx 二、php环境安装 2.1 php安装 yum -y install php 2.2 php-fpm安装 yum -y install php-fpm 注&#xff1a;PHP在 5.3.3 之后已经讲php-fpm写入php源码核心了。 2.3 项目依赖的php-xml和php-xmlrpc安装 yum -y install php-…

开源模型应用落地-chatglm3-6b模型小试-入门篇(一)

一、前言 刚开始接触AI时&#xff0c;您可能会感到困惑&#xff0c;因为面对众多开源模型的选择&#xff0c;不知道应该选择哪个模型&#xff0c;也不知道如何调用最基本的模型。但是不用担心&#xff0c;我将陪伴您一起逐步入门&#xff0c;解决这些问题。 在信息时代&#xf…

LeetCode 第391场周赛个人题解

目录 哈沙德数 原题链接 思路分析 AC代码 换水问题 II 原题链接 思路分析 AC代码 交替子数组计数 原题链接 思路分析 AC代码 最小化曼哈顿距离 原题链接 思路分析 AC代码 哈沙德数 原题链接 思路分析 签到题&#xff0c;不说了 AC代码 class Solution:def s…

Firefox 关键词高亮插件的简单实现

目录 1、配置 manifest.json 文件 2、编写侧边栏结构 3、查找关键词并高亮的方法 3-1&#xff09; 如果直接使用 innerHTML 进行替换 4、清除关键词高亮 5、页面脚本代码 6、参考 1、配置 manifest.json 文件 {"manifest_version": 2,"name": &quo…

ES6展开运算符

1.展开可迭代对象&#xff08;简单理解为数组和伪数组&#xff09;&#xff0c;如数组、 NodeList 、arguments。 可以通过展开运算符把一个伪数组转换为数组 const a [...document.body.children]; console.log(a); console.log(Array.isArray(a));2.实现数组的浅拷贝 cons…

wireshark解析grpc/protobuf的方法

1&#xff0c;wireshark需要安装3.20以上 下载地址&#xff1a;https://www.wireshark.org/ 2&#xff0c;如果版本不对&#xff0c;需要卸载&#xff0c;卸载方法&#xff1a; sudo rm -rf /Applications/Wireshark.app sudo rm -rf $HOME/.config/wireshark sudo rm -rf /…

Linux笔记之制作基于ubuntu20.4的最小OpenGL C++开发docker镜像

Linux笔记之制作基于ubuntu20.4的最小OpenGL C开发docker镜像 —— 2024-04-03 夜 code review! 文章目录 Linux笔记之制作基于ubuntu20.4的最小OpenGL C开发docker镜像1.这里把这本书的例程代码放在了Dockerfile所在的文件夹内以使镜像预装例程代码2.创建Dockerfile3.构建Do…

【前端面试3+1】10 npm run dev 发生了什么、vue的自定义指令如何实现、js的数据类型有哪些及其不同、【最长公共前缀】

一、npm run dev发生了什么 运行npm run dev时&#xff0c;通常是在一个基于Node.js的项目中&#xff0c;用来启动开发服务器或者执行一些开发环境相关的任务。下面是一般情况下npm run dev会执行的步骤&#xff1a; 1. 查找package.json中的scripts字段&#xff1a; npm会在项…

redis之主从复制、哨兵模式

一 redis群集有三种模式 主从复制&#xff1a; 主从复制是高可用Redis的基础&#xff0c;哨兵和集群都是在主从复制基础上实现高可用的。 主从复制主要实现了数据的多机备份&#xff0c;以及对于读操作的负载均衡和简单的故障恢复。 缺陷&#xff1a; 故障恢复无法自动化&…

VSCode安装及Python、Jupyter插件安装使用

VSCode 介绍 Visual Studio Code&#xff08;简称VSCode&#xff09;是一个由微软开发的免费、开源的代码编辑器。VSCode是一个轻量级但是非常强大的代码编辑器&#xff0c;它支持多种编程语言&#xff08;如C,C#&#xff0c;Java&#xff0c;Python&#xff0c;PHP&#xff0…

Redis的值有5种数据结构,不同数据结构的使用场景是什么?

文章目录 字符串缓存计数共享Session限速 哈希缓存 列表消息队列文章列表栈队列有限集合 集合标签抽奖社交需求 有序集合排行榜系统 字符串 缓存 &#xff08;1&#xff09;使用原生字符类型缓存 优点&#xff1a;简单直观&#xff0c;每个属性都支持更新操作 缺点&#xff1…

如何在本地搭建集成大语言模型Llama 2的聊天机器人并实现无公网IP远程访问

文章目录 1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 随着ChatGPT 和open Sora 的热度剧增,大语言模型时代,开启了AI新篇章,大语言模型的应用非常广泛&#xff0c;包括聊天机…