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

目录

形式

假设

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

多元回归

广义线性回归

对数线性回归

逻辑回归

线性判别分析


形式

        线性说白了就是初中的一次函数的一种应用,根据不同的(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.51
 155752.6  152211.77 149759.96 146121.95 144259.4  141585.52 134307.35
 132602.65 129917.04 126992.93 125370.37 124266.9  122776.86 118474.03
 111313.02 110352.25 108733.99 108552.04 107404.34 105733.54 105008.31
 103282.38 101004.64  99937.59  97483.56  97427.84  96778.92  96712.8
  96479.51  90708.19  89949.14  81229.06  81005.76  78239.91  77798.83
  71498.49  69758.98  65200.33  64926.08  49490.75  42559.73  35673.41
  14681.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个特征(一列)
onehotencoder

array([[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.529248553095

0.9501847627493607

        y 的预测值:

y_pred = regressor.predict(X_test)
y_pred

array([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是一种将数据降维的方法,对于这部分的数学逻辑比较复杂,暂时了解了一下原理

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring-IoC 基于xml管理

现大多使用注解方式,xml方式并不简洁,本文仅记录xml用作基础学习。 0、前提 首先在父项目的pom.xml中配置好依赖们。然后子模块也可以使用这些依赖。 在resource目录下创建Spring的xml文件,名称无要求,本文使用bean.xml。文件最…

大数据实验统计-1、Hadoop安装及使用;2、HDFS编程实践;3、HBase编程实践;4、MapReduce编程实践

大数据实验统计 1、Hadoop安装及使用; 一.实验内容 Hadoop安装使用: 1)在PC机上以伪分布式模式安装Hadoop; 2)访问Web界面查看Hadoop信息。 二.实验目的 1、熟悉Hadoop的安装流程。 2、…

Educational Codeforces Round 133 (Rated for Div. 2) C. Robot in a Hallway

题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e18, maxm 4e4 5; c…

探索async/await的魔力:简化JavaScript异步编程

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

软件设计师28--SQL语言

软件设计师28--SQL语言 考点1&#xff1a;普通查询SQL语言SQL语言 - 查询例题&#xff1a; 考点2&#xff1a;分组查询SQL语言 - 查询例题&#xff1a; 考点3&#xff1a;权限控制SQL语言例题&#xff1a; 考点1&#xff1a;普通查询 SQL语言 SQL语言 - 查询 例题&#xff1a;…

容器安全的防护之道

随着云计算的发展&#xff0c;云原生技术已经成为企业数字化转型的得力武器&#xff0c;如何保障容器安全&#xff0c;已成为企业最关心的问题。为此&#xff0c;德迅蜂巢原生安全平台由德迅云安全自主研发&#xff0c;能够很好集成到云原生复杂多变的环境中&#xff0c;如PaaS…

redis乱码\xac\xed\x00\x05t\x00H解决

发现数据库乱码&#xff1a; 这数据库是来自rdids队列list实现的一个简单队列&#xff0c;停止使用该list的服务&#xff0c;查看里面的值&#xff0c;发现 乱码\xac\xed\x00\x05t\x00H&#xff0c;如下图&#xff1a; 很明发送数据端的问题&#xff0c;检查代码&#xff1a; …

软考高级架构师:嵌入式系统概述

一、AI 讲解 嵌入式操作系统是一种专门设计来管理特定硬件的软件系统。它能够在资源有限的环境中高效运行&#xff0c;常见于嵌入式系统中&#xff0c;如智能家居设备、工业控制系统等。 下面将详细介绍嵌入式系统的架构、初始化过程和部件构成。 嵌入式系统的架构 嵌入式系…

【HTB】Trick 靶场

Trick靶场 地址&#xff1a;https://app.hackthebox.com/machines/477 打靶过程 靶机IP:10.129.227.180 1.信息收集 1.1 nmap 端口扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap -Pn -sC -sV -p- 10.129.227.180 --min-rate5000 Starting Nmap 7.94SVN ( https://nmap…

探索口腔系统功能架构的演变与未来

随着医疗技术的不断发展和人们对口腔健康的重视&#xff0c;口腔系统的功能架构也在不断演变。从传统的口腔诊疗到数字化的口腔健康管理&#xff0c;口腔系统的功能框架正在经历着翻天覆地的变化。本文将深入探讨口腔系统功能架构的演变历程以及未来发展趋势。 --- 随着社会的…

JavaScript(六)---【回调、异步、promise、Async】

零.前言 JavaScript(一)---【js的两种导入方式、全局作用域、函数作用域、块作用域】-CSDN博客 JavaScript(二)---【js数组、js对象、this指针】-CSDN博客 JavaScript(三)---【this指针&#xff0c;函数定义、Call、Apply、函数绑定、闭包】-CSDN博客 JavaScript(四)---【执…

阿里云弹性计算通用算力型u1实例性能评测,性价比高

阿里云服务器u1是通用算力型云服务器&#xff0c;CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器&#xff0c;ECS通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xf…

某站价值5000的码支付多商户商业版 完美可运营版本PHP源码

一款非常好用的码支付即时到账PHP源码 互站网卖4999 买来之后 模板有点丑 自己更换了的一个好看点的 1.修改数据库 用户名 密码 数据库名 2.后台地址 你的域名/admin 账号admin 密码123456 3.通用的监控APP软件, 反编译一下修改成你平台的名字和图标即可 源码免费…

动规训练2

一、最小路径和 1、题目解析 就是一个人从左上往做下走&#xff0c;每次只能往右或者往下&#xff0c;求他到终点时&#xff0c;路径上数字和最小&#xff0c;返回最小值 2、算法原理 a状态表示方程 小技巧&#xff1a;经验题目要求 用一个二维数组表示&#xff0c;创建一个…

(4)(4.6) Triducer

文章目录 前言 1 安装triducer 2 故障排除 3 参数说明 前言 Triducer 集速度、温度和深度传感器于一体。埃文在这篇 ardupilot.org 博文底部提供了这些说明(Evan at the bottom of this ardupilot.org blog post)。 1 安装triducer 下面的示例提供了在 Pixhawk 上安装 tri…

javaWeb城市公交查询系统的设计与实现

一、选题背景 随着低碳生活的普及&#xff0c;人们更倾向于低碳环保的出行方式&#xff0c;完善公交系统无疑具有重要意义。公交是居民日常生活中最常使用的交通工具之一&#xff0c;伴随着我国经济繁荣和城市人口增长&#xff0c;出行工具的选择也变得越来越重要。政府在公共…

使用vuepress搭建个人的博客(一):基础构建

前言 vuepress是一个构建静态资源网站的库 地址:VuePress 一般来说,这个框架非常适合构建个人技术博客,你只需要把自己写好的markdown文档准备好,完成对应的配置就可以了 搭建 初始化和引入 创建文件夹press-blog npm初始化 npm init 引入包 npm install -D vuepress…

涂鸦 IoT 开发平台产品开发使用教程

产品开发 一、涂鸦 IoT 平台 地址。 什么是涂鸦 IoT 开发平台&#xff1f; 涂鸦 IoT 开发平台支持海量物联网&#xff08;IoT&#xff09;设备、网关、服务、应用连接上云。在 产品开发 阶段&#xff0c;涂鸦 IoT 开发平台提供了多种连接方式&#xff0c;实现设备与 Io…

最新梨花带雨网页音乐播放器

源码简介 最新梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码下载 梨花带雨播放器基于thinkphp6开发的XPlayerHTML5网页播放器前台控制面板,支持多音乐平台音乐解析。二开内容&#xff1a;修复播放器接口问题&#xff0c;把接口本地化&#xff0c;但是集成外链播放…

【系统架构师】-软件架构评估

1、质量属性 1、性能 系统的响应能力&#xff0c;响应时间、吞吐量&#xff0c; 策略&#xff1a;优先级队列、资源调度 2、可用性 系统正常运行的时间比例&#xff08;两次故障之间的时间长度&#xff09;&#xff0c;故障间隔时间&#xff0c; 策略&#xff1a;冗余、心…