当前位置: 首页 > news >正文

(机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归

部分参考

  • 机器学习算法——线性回归(超级详细且通俗)
  • 刘建平博客

文章目录

  • 一:线性回归基本概念
    • (1)回归分析
    • (2)线性回归
  • 二:线性回归确定参数的方法
    • (1)最小二乘法
      • A:代数求法
      • B:矩阵求法(主要使用)
    • (2)梯度下降
      • A:梯度
      • B:梯度下降算法简介
      • C:梯度下降算法代数描述
  • 三:线性回归典例之波士顿房价预测
    • (1)波士顿房价数据集
    • (2)手动线性回归
    • (3)scikit-learn实现
    • (4)one-hot编码
      • A:什么是one-hot编码
      • B:什么情况下会使用one-hot编码

一:线性回归基本概念

(1)回归分析

回归分析:回归分析是统计学中的基本概念,是指一种预测性的建模技术,主要研究自变量和因变量的关系,通常使用曲线拟合数据点,然后研究如何使曲线到数据点的距离差异最小

在这里插入图片描述

(2)线性回归

  • 以一元线性回归为例(只有一个未知自变量)

线性回归:假设有 n n n组数据,自变量 x ( x 1 , x 2 , . . . , x n ) x(x_{1},x_{2},...,x_{n}) x(x1,x2,...,xn),因变量 y ( y 1 , y 2 , . . . , y n ) y(y_{1},y_{2},...,y_{n}) y(y1,y2,...,yn),并且它们满足 f ( x ) = a x + b f(x)=ax+b f(x)=ax+b,那么线性回归的目标就是如何能让 f ( x ) f(x) f(x) y y y之间的差异最小。其中衡量差异的方式即损失函数有很多种,在线性回归中主要使用均方误差,记 J ( a , b ) J(a, b) J(a,b) f ( x ) f(x) f(x) y y y之间的差异,则:

J ( a , b ) = ∑ i = 1 n ( f ( x ( i ) ) − y ( i ) ) 2 = ∑ i = 1 n ( a x ( i ) + b − y ( i ) ) 2 J(a, b)=\sum\limits_{i=1}^{n}(f(x^{(i)})-y^{(i)})^{2}=\sum\limits_{i=1}^{n}(ax^{(i)}+b-y^{(i)})^{2} J(a,b)=i=1n(f(x(i))y(i))2=i=1n(ax(i)+by(i))2

可以发现 J ( a , b ) J(a, b) J(a,b)是一个二次函数,所以有最小值,因此当 J ( a , b ) J(a, b) J(a,b)取最小值时, f ( x ) f(x) f(x) y y y的差异最小,所以关键在于确定 a a a b b b的值,方法有三种

  • 最小二乘法
  • 梯度下降法
  • 正规方程

二:线性回归确定参数的方法

(1)最小二乘法

A:代数求法

  • 最小二乘法有代数求解矩阵求解两种方法

分别关于 a a a b b b对函数 J ( a , b ) = ∑ i = 1 n ( f ( x ( i ) ) − y ( i ) ) 2 = ∑ i = 1 n ( a x ( i ) + b − y ( i ) ) 2 J(a, b)=\sum\limits_{i=1}^{n}(f(x^{(i)})-y^{(i)})^{2}=\sum\limits_{i=1}^{n}(ax^{(i)}+b-y^{(i)})^{2} J(a,b)=i=1n(f(x(i))y(i))2=i=1n(ax(i)+by(i))2求偏导,然后令其为0解出 a a a b b b,解得

a = ∑ i = 1 n y ( i ) ( x ( i ) − x ‾ ) ∑ i = 1 n ( x ( i ) ) 2 − 1 n ( ∑ i = 1 n x ( i ) ) 2 a=\frac{\sum\limits_{i=1}^{n}y^{(i)}(x^{(i)}-\overline{x})}{\sum\limits_{i=1}^{n}(x^{(i)})^{2}-\frac{1}{n}(\sum\limits_{i=1}^{n}x^{(i)})^{2}} a=i=1n(x(i))2n1(i=1nx(i))2i=1ny(i)(x(i)x)

b = 1 n ∑ i = 1 n ( y ( i ) − a x ( i ) ) b=\frac{1}{n}\sum\limits_{i=1}^{n}(y^{(i)}-ax^{(i)}) b=n1i=1n(y(i)ax(i))

B:矩阵求法(主要使用)

假设函数 h θ ( x 1 , x 2 , . . . , x n = θ 0 + θ 1 x 1 + . . . + θ n − 1 x n − 1 h_{\theta}(x_{1}, x_{2}, ... , x_{n}=\theta_{0}+\theta_{1}x_{1}+...+\theta_{n-1}x_{n-1} hθ(x1,x2,...,xn=θ0+θ1x1+...+θn1xn1的矩阵表达式为

h θ ( x ) = X θ h_{\theta}(x)=X\theta hθ(x)=

  • X X X m × n m×n m×n维矩阵,其中 m m m代表样本个数, n n n代表样本特征数
  • h θ ( x ) h_{\theta}(x) hθ(x) m × 1 m×1 m×1向量, θ \theta θ n × 1 n×1 n×1向量

损失函数定义为

J ( θ ) = 1 2 ( X θ − Y ) T ( X θ − Y ) J(\theta)=\frac{1}{2}(X\theta-Y)^{T}(X\theta-Y) J(θ)=21(Y)T(Y)

  • Y Y Y是样本的输出向量,维度为 m × 1 m×1 m×1
  • 1 2 \frac{1}{2} 21主要是为了求导后系数为1

接下来需要对 θ \theta θ向量求导并令其为0

∂ ∂ θ J ( θ ) = X T ( X θ − Y ) = 0 \frac{\partial}{\partial \theta}J(\theta)=X^{T}(X\theta-Y)=0 θJ(θ)=XT(Y)=0

解得

θ = ( X T X ) − 1 X T Y \theta = (X^{T}X)^{-1}X^{T}Y θ=(XTX)1XTY

(2)梯度下降

A:梯度

梯度:对多元函数的各参数求偏导,然后把求得的各个参数的偏导数以向量的形式写出来,就是梯度

  • 注意:当函数是一元函数,梯度就是导数

  • 例如函数 f ( x , y ) f(x, y) f(x,y)分别对 x x x y y y求偏导数,求得的梯度向量就是 ( ∂ f ∂ x , ∂ f ∂ y ) (\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}) (xf,yf),简写为 g r a d f ( x , y ) grad\quad f(x, y) gradf(x,y)

从几何意义上来讲,梯度向量就是函数变化最快的的地方,沿着梯度向量的方向,更容易找到函数的最大值,同理沿着梯度向量相反的方向,更容易找到函数的最小值

在这里插入图片描述

B:梯度下降算法简介

梯度下降算法:假设有 n n n组数据,自变量 x ( x 1 , x 2 , . . . , x n ) x(x_{1},x_{2},...,x_{n}) x(x1,x2,...,xn),因变量 y ( y 1 , y 2 , . . . , y n ) y(y_{1},y_{2},...,y_{n}) y(y1,y2,...,yn),并且它们满足 f ( x ) = a x f(x)=ax f(x)=ax,记 J ( a ) J(a) J(a) f ( x ) f(x) f(x) y y y之间的差异,也即

J ( a , ) = ∑ i = 1 n ( f ( x ( i ) ) − y ( i ) ) 2 = ∑ i = 1 n ( a x ( i ) − y ( i ) ) 2 J(a,)=\sum\limits_{i=1}^{n}(f(x^{(i)})-y^{(i)})^{2}=\sum\limits_{i=1}^{n}(ax^{(i)}-y^{(i)})^{2} J(a,)=i=1n(f(x(i))y(i))2=i=1n(ax(i)y(i))2

在梯度下降算法中,需要给参数 a a a给一个预设值,然后逐步修改 a a a,直到 J ( a ) J(a) J(a)取到最小值时,确定 a a a的值。梯度下降公式如下

r e p e a t { a : = a − α ∂ J ( a ) ∂ a } repeat\{a := a-\alpha \frac{\partial J(a)}{\partial a}\} repeat{a:=aαaJ(a)}

类比于生活中下山的例子,当一座大山上的某处位置,由于我们不知道怎么下山,于是决定走一步算一步,也就是在每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置梯度,向这一步所在位置沿着最陡峭最易下山的位置走一步。这样一步步的走下去,一直走到觉得我们已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了某一个局部的山峰低处

可以看出,梯度下降不一定能够找到全局的最优解,有可能是一个局部最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解

在这里插入图片描述

C:梯度下降算法代数描述

①:先决条件:确认优化模型的假设函数和损失函数

  • 对于线性回归,假设函数表示为 h θ ( x 1 , x 2 , . . , x n ) = θ 0 + θ 1 x 1 + . . . + θ n x n ∣ h_{\theta}(x_{1},x_{2},..,x_{n})=\theta_{0}+\theta_{1}x_{1}+...+\theta_{n}x_{n}| hθ(x1,x2,..,xn)=θ0+θ1x1+...+θnxn,为了简化我们可以增加一个特征 x 0 = 1 x_{0}=1 x0=1,这样 h θ ( x 0 , x 1 , . . . , x n ) = ∑ i = 0 n θ i x i h_{\theta}(x_{0},x_{1},...,x_{n})=\sum\limits_{i=0}^{n}\theta_{i}x_{i} hθ(x0,x1,...,xn)=i=0nθixi
  • 对于上面的假设函数,其损失函数为 J ( θ 0 , θ 1 , . . . , θ n ) = 1 2 m ∑ j = 1 n ( h θ ( x 0 j , x 1 j , . . . , x n j ) − y j ) J(\theta_{0},\theta_{1},...,\theta_{n})=\frac{1}{2m}\sum\limits_{j=1}^{n}(h_{\theta}(x_{0}^{j},x_{1}^{j},...,x_{n}^{j})-y_{j}) J(θ0,θ1,...,θn)=2m1j=1n(hθ(x0j,x1j,...,xnj)yj)

②:算法参数初始化:主要是初始化 θ 0 , θ 1 , . . . , θ n \theta_{0},\theta_{1},...,\theta_{n} θ0,θ1,...,θn、算法终止距离 ξ \xi ξ和步长 α \alpha α

  • 在没有任何先验知识的情况下,可以将所有的 θ \theta θ初始化为0,将步长初始化为1

③:算法流程

  • 确定当前位置的损失函数梯度:对于 θ i \theta_{i} θi其梯度表达式为 ∂ ∂ θ i J ( θ 0 , θ 1 , . . . , θ n ) \frac{\partial}{\partial \theta_{i}}J(\theta_{0},\theta_{1},...,\theta_{n}) θiJ(θ0,θ1,...,θn)
  • 用步长乘以损失函数的梯度,得到当前位置下降距离: 也即 α ∂ ∂ θ i J ( θ 0 , θ 1 , . . . , θ n ) \alpha \frac{\partial}{\partial \theta_{i}}J(\theta_{0},\theta_{1},...,\theta_{n}) αθiJ(θ0,θ1,...,θn)
  • 确定是否所有的 θ i \theta_{i} θi梯度下降距离都小于 ξ \xi ξ,若小于则算法终止,当前所有的 θ i \theta_{i} θi即为最终结果,否则转入下一步
  • 更新所有的 θ \theta θ:对于 θ i \theta_{i} θi,则有 θ i = θ i − α ∂ ∂ θ i J ( θ 0 , θ 1 , . . . , θ n ) \theta_{i}=\theta_{i}-\alpha \frac{\partial}{\partial \theta_{i}}J(\theta_{0},\theta_{1},...,\theta_{n}) θi=θiαθiJ(θ0,θ1,...,θn)更新完毕后转入第一步

三:线性回归典例之波士顿房价预测

(1)波士顿房价数据集

波士顿房价数据集为一个506×14的矩阵,其中最后一个特征是房价

在这里插入图片描述

13个维度表示的含义如下

  • CRIM 城镇人口犯罪率
  • ZN 超过25000平方英尺的住宅用地所占比例
  • INDUS 城镇非零售业务地区的比例
  • CHAS 查尔斯河虚拟变量(如果土地在河边=1;否则是0)
  • NOX 一氧化氮浓度(每1000万份)
  • RM 平均每居民房数
  • AGE 在1940年之前建成的所有者占用单位的比例
  • DIS 与五个波士顿就业中心的加权距离
  • RAD 辐射状公路的可达性指数
  • TAX 每10,000美元的全额物业税率
  • RTRATIO 城镇师生比例
  • B 1000(Bk-0.63)^2其中Bk是城镇黑人的比例
  • LSTAT 人口中地位较低人群的百分数
  • MEDV (目标变量/类别属性)以1000美元计算的自有住房的中位数

(2)手动线性回归

机器学习的一般过程就是建立模型-训练数据,其中模型建立是最困难的过程,而线性回归的模型就是我们上面所提到最小二乘法(以最小二乘法为例)中的公式,我们的目的就是用代码计算

θ = ( X T X ) − 1 X T Y \theta = (X^{T}X)^{-1}X^{T}Y θ=(XTX)1XTY

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os
import numpy as np
import pandas as pd

np.set_printoptions(suppress=True)  # 强制使用浮点数显示

if os.path.exists('Boston.chache'):
    raw_data = pd.read_pickle('Boston.chache')

else:
    raw_data = pd.read_csv(r'E:\Postgraduate\Course Study\机器学习-深度学习科研训练\data\Boston.csv', sep=' +', engine='python', header=None)
    raw_data.to_pickle('Boston.chache')

raw_data['ONE'] = 1  # 为求截距,增加全1列
data = raw_data.drop(labels=13, inplace=False, axis=1)
price = raw_data[13]  # 真实价格

# 计算theta
theta = np.dot(np.dot(np.linalg.inv(np.dot(data.T, data)), data.T), price)  # 1×13向量
print(theta)
print('-'*30)
price_predict = np.dot(data, theta) # 506-13 ×13-1  预测价格
print(price_predict)
print('-'*30)
print(np.mean((price_predict - price) ** 2))  # 均方误差


结果

[ -0.10801136   0.04642046   0.02055863   2.68673382 -17.76661123
   3.80986521   0.00069222  -1.47556685   0.30604948  -0.01233459
  -0.95274723   0.00931168  -0.52475838  36.45948839] # 最后一个为截距
------------------------------
[30.00384338 25.02556238 30.56759672 28.60703649 27.94352423 25.25628446
 23.00180827 19.53598843 11.52363685 18.92026211 18.99949651 21.58679568
 20.90652153 19.55290281 19.28348205 19.29748321 20.52750979 16.91140135
 16.17801106 18.40613603 12.52385753 17.67103669 15.83288129 13.80628535
 15.67833832 13.38668561 15.46397655 14.70847428 19.54737285 20.8764282
 11.45511759 18.05923295  8.81105736 14.28275814 13.70675891 23.81463526
 22.34193708 23.10891142 22.91502612 31.35762569 34.21510225 28.02056414
 25.20386628 24.60979273 22.94149176 22.09669817 20.42320032 18.03655088
  9.10655377 17.20607751 21.28152535 23.97222285 27.6558508  24.04901809
 15.3618477  31.15264947 24.85686978 33.10919806 21.77537987 21.08493555
 17.8725804  18.51110208 23.98742856 22.55408869 23.37308644 30.36148358
 25.53056512 21.11338564 17.42153786 20.78483633 25.20148859 21.7426577
 24.55744957 24.04295712 25.50499716 23.9669302  22.94545403 23.35699818
 21.26198266 22.42817373 28.40576968 26.99486086 26.03576297 25.05873482
 24.78456674 27.79049195 22.16853423 25.89276415 30.67461827 30.83110623
 27.1190194  27.41266734 28.94122762 29.08105546 27.03977365 28.62459949
 24.72744978 35.78159518 35.11454587 32.25102801 24.58022019 25.59413475
 19.79013684 20.31167129 21.43482591 18.53994008 17.18755992 20.75049026
 22.64829115 19.7720367  20.64965864 26.52586744 20.77323638 20.71548315
 25.17208881 20.43025591 23.37724626 23.69043261 20.33578364 20.79180873
 21.91632071 22.47107777 20.55738556 16.36661977 20.56099819 22.48178446
 14.61706633 15.17876684 18.93868592 14.05573285 20.03527399 19.41013402
 20.06191566 15.75807673 13.25645238 17.26277735 15.87841883 19.36163954
 13.81483897 16.44881475 13.57141932  3.98885508 14.59495478 12.1488148
  8.72822362 12.03585343 15.82082058  8.5149902   9.71844139 14.80451374
 20.83858153 18.30101169 20.12282558 17.28601894 22.36600228 20.10375923
 13.62125891 33.25982697 29.03017268 25.56752769 32.70827666 36.77467015
 40.55765844 41.84728168 24.78867379 25.37889238 37.20347455 23.08748747
 26.40273955 26.65382114 22.5551466  24.29082812 22.97657219 29.07194308
 26.5219434  30.72209056 25.61669307 29.13740979 31.43571968 32.92231568
 34.72440464 27.76552111 33.88787321 30.99238036 22.71820008 24.7664781
 35.88497226 33.42476722 32.41199147 34.51509949 30.76109485 30.28934141
 32.91918714 32.11260771 31.55871004 40.84555721 36.12770079 32.6692081
 34.70469116 30.09345162 30.64393906 29.28719501 37.07148392 42.03193124
 43.18949844 22.69034796 23.68284712 17.85447214 23.49428992 17.00587718
 22.39251096 17.06042754 22.73892921 25.21942554 11.11916737 24.51049148
 26.60334775 28.35518713 24.91525464 29.68652768 33.18419746 23.77456656
 32.14051958 29.7458199  38.37102453 39.81461867 37.58605755 32.3995325
 35.45665242 31.23411512 24.48449227 33.28837292 38.0481048  37.16328631
 31.71383523 25.26705571 30.10010745 32.71987156 28.42717057 28.42940678
 27.29375938 23.74262478 24.12007891 27.40208414 16.3285756  13.39891261
 20.01638775 19.86184428 21.2883131  24.0798915  24.20633547 25.04215821
 24.91964007 29.94563374 23.97228316 21.69580887 37.51109239 43.30239043
 36.48361421 34.98988594 34.81211508 37.16631331 40.98928501 34.44634089
 35.83397547 28.245743   31.22673593 40.8395575  39.31792393 25.70817905
 22.30295533 27.20340972 28.51169472 35.47676598 36.10639164 33.79668274
 35.61085858 34.83993382 30.35192656 35.30980701 38.79756966 34.33123186
 40.33963075 44.67308339 31.59689086 27.3565923  20.10174154 27.04206674
 27.2136458  26.91395839 33.43563311 34.40349633 31.8333982  25.81783237
 24.42982348 28.45764337 27.36266999 19.53928758 29.11309844 31.91054611
 30.77159449 28.94275871 28.88191022 32.79887232 33.20905456 30.76831792
 35.56226857 32.70905124 28.64244237 23.58965827 18.54266897 26.87889843
 23.28133979 25.54580246 25.48120057 20.53909901 17.61572573 18.37581686
 24.29070277 21.32529039 24.88682244 24.86937282 22.86952447 19.45123791
 25.11783401 24.66786913 23.68076177 19.34089616 21.17418105 24.25249073
 21.59260894 19.98446605 23.33888    22.14060692 21.55509929 20.61872907
 20.16097176 19.28490387 22.1667232  21.24965774 21.42939305 30.32788796
 22.04734975 27.70647912 28.54794117 16.54501121 14.78359641 25.27380082
 27.54205117 22.14837562 20.45944095 20.54605423 16.88063827 25.40253506
 14.32486632 16.59488462 19.63704691 22.71806607 22.20218887 19.20548057
 22.66616105 18.93192618 18.22846804 20.23150811 37.4944739  14.28190734
 15.54286248 10.83162324 23.80072902 32.6440736  34.60684042 24.94331333
 25.9998091   6.126325    0.77779806 25.30713064 17.74061065 20.23274414
 15.83331301 16.83512587 14.36994825 18.47682833 13.4276828  13.06177512
  3.27918116  8.06022171  6.12842196  5.6186481   6.4519857  14.20764735
 17.21225183 17.29887265  9.89116643 20.22124193 17.94181175 20.30445783
 19.29559075 16.33632779  6.55162319 10.89016778 11.88145871 17.81174507
 18.26126587 12.97948781  7.37816361  8.21115861  8.06626193 19.98294786
 13.70756369 19.85268454 15.22308298 16.96071981  1.71851807 11.80578387
 -4.28131071  9.58376737 13.36660811  6.89562363  6.14779852 14.60661794
 19.6000267  18.12427476 18.52177132 13.1752861  14.62617624  9.92374976
 16.34590647 14.07519426 14.25756243 13.04234787 18.15955693 18.69554354
 21.527283   17.03141861 15.96090435 13.36141611 14.52079384  8.81976005
  4.86751102 13.06591313 12.70609699 17.29558059 18.740485   18.05901029
 11.51474683 11.97400359 17.68344618 18.12695239 17.5183465  17.22742507
 16.52271631 19.41291095 18.58215236 22.48944791 15.28000133 15.82089335
 12.68725581 12.8763379  17.18668531 18.51247609 19.04860533 20.17208927
 19.7740732  22.42940768 20.31911854 17.88616253 14.37478523 16.94776851
 16.98405762 18.58838397 20.16719441 22.97718032 22.45580726 25.57824627
 16.39147632 16.1114628  20.534816   11.54272738 19.20496304 21.86276391
 23.46878866 27.09887315 28.56994302 21.08398783 19.45516196 22.22225914
 19.65591961 21.32536104 11.85583717  8.22386687  3.66399672 13.75908538
 15.93118545 20.62662054 20.61249414 16.88541964 14.01320787 19.10854144
 21.29805174 18.45498841 20.46870847 23.53334055 22.37571892 27.6274261
 26.12796681 22.34421229]
------------------------------
21.8948311817292

(3)scikit-learn实现

具体训练时还要注意以下几点

  • 如果没有测试数据,那么不能将全部数据都用作训练,需要拆分出一部分数据。使用scikit-learn中的train_test_split函数即可
  • 训练完成后需要画图进行分析
  • 如果数据过大或过小往往要取对数
  • 对于某些数据可能要进行one-hot编码(后面说到)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os
import numpy as np
import pandas as pd
from sklearn.linear_model import  LinearRegression
from sklearn.metrics import mean_squared_error  # 均方误差
from sklearn.metrics import mean_absolute_error  # 平方绝对误差
from sklearn.model_selection import train_test_split  # 训练测试分割

np.set_printoptions(suppress=True)  # 强制使用浮点数显示

if os.path.exists('Boston.chache'):
    raw_data = pd.read_pickle('Boston.chache')

else:
    raw_data = pd.read_csv(r'E:\Postgraduate\Course Study\机器学习-深度学习科研训练\data\Boston.csv', sep=' +', engine='python', header=None)
    raw_data.to_pickle('Boston.chache')

data = raw_data[np.arange(13)]
price = raw_data[13]  # 真实价格

# 拆分数据,其中 80%训练,20%测试
data_train, data_test, price_train, price_test = train_test_split(data, price, test_size=0.2, random_state=520) # random_state仅为了固定随机种子

# 线性回归训练
model = LinearRegression(fit_intercept=True)  # fit_intercept = True表示也训练截距
model.fit(data_train, price_train)  # 训练
theta = model.coef_  # 系数
intercept = model.coef_  # 截距
price_train_predict = model.predict(data_train)  # 结果预测
MSE_train = mean_squared_error(price_train, price_train_predict)  # 均方误差
MAE_train = mean_absolute_error(price_train, price_train_predict)  # 平方绝对误差

# 测试数据
price_test_predict = model.predict(data_test)
MSE_test = mean_squared_error(price_test, price_test_predict)  # 均方误差
MAE_test = mean_absolute_error(price_test, price_test_predict)  # 平方绝对误差


# 模型分析
# 训练集
err_train = price_train_predict - price_train
plt.hist(err_train, bins=20, edgecolor='k')
plt.title('Train set error histogram', size=16)
plt.grid(True, color='gray', linestyle=':')

# 测试集
err_test = price_test_predict - price_test
plt.figure()
plt.hist(err_test, bins=20, edgecolor='k')
plt.title('Test set error histogram', size=16)
plt.grid(True, color='gray', linestyle=':')
plt.show()

在这里插入图片描述

在这里插入图片描述

(4)one-hot编码

A:什么是one-hot编码

专业的术语就再不说了,这里我们以“hello world”为例,进行one-hot编码,步骤如下

  • 确定编码对象:hello world
  • 确定分类变量h e l l o 空格 w o r l d,共27种类别(26个小写字母+空格)
  • 转换问题:以上问题等价于有11个样本,每个样本有27个特征,将其转化为二进制向量表示

需要注意特征排列的顺序不同,对应的二进制向量亦不同,所以要事先约定特征排列的顺序

  • 27种特征首先进行整数编码:a-0,b-1,…,z-25,空格-26
  • 27种特征按照整数编码大小从前往后排列

得到one-hot编码如下

在这里插入图片描述

B:什么情况下会使用one-hot编码

  • 对于定类类型的数据,建议使用one-hot encodin:定类类型就是纯分类,不排序,没有逻辑关系:比如性别分男和女,男女不存在任何逻辑关系,我们不能说男就比女好,或者相反。再者,中国各省市分类也可以用独热编码,同样各省不存在逻辑关系,这时候使用one-hot encoding会合适些。但注意,一般会舍去一个变量,比如男的对立面肯定是女,那么女就是重复信息,所以保留其中一个变量即可
  • 对于定序类型的数据,建议使用label encoding。定序类型也是分类,但有排序逻辑关系,等级上高于定类:比如,学历分小学,初中,高中,本科,研究生,各个类别之间存在一定的逻辑,显然研究生学历是最高的,小学最低。这时候使用Label encoding会显得更合适,因为自定义的数字顺序可以不破坏原有逻辑,并与这个逻辑相对应。
  • 对数值大小敏感的模型必须使用one-hot encoding或者Dummy:典型的例子就是LR和SVM。二者的损失函数对数值大小是敏感的,并且变量间的数值大小是有比较意义的。而Label encoding的数字编码没有数值大小的含义,只是一种排序,因此对于这些模型都使用one-hot encoding。
  • 对数值大小不敏感的模型(如树模型)不建议使用one-hot encoding:一般这类模型为树模型。如果分类类别特别多,那么one-hot encoding会分裂出很多特征变量。这时候,如果我们限制了树模型的深度而不能向下分裂的话,一些特征变量可能就因为模型无法继续分裂而被舍弃损失掉了。因此,此种情况下可以考虑使用Label encoding

相关文章:

  • JS的精髓,事件详解
  • 高等数学(第七版)同济大学 习题8-6 个人解答
  • 【Linux】进程地址空间
  • 【计算机组成原理】输入/输出系统(四)—— I/O方式
  • 让GPU跑的更快
  • 给课题组师弟师妹们的开荒手册
  • Java操作Excel - Easy Excel
  • 交通状态预测 | Python实现基于LSTM的客流量预测方法
  • 一条sql语句在MySQL的执行流程
  • 当遇到听不了的歌,Python程序员都是这么做的...
  • leetcode-289:生命游戏
  • C语言中的结构体应用详解及注意事项
  • 【2022】Elasticsearch-7.17.6集群部署
  • 计算器——位运算(c语言)
  • Maven 基础 5 第一个Maven 项目(IDEA 生成)
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Asm.js的简单介绍
  • bearychat的java client
  • exports和module.exports
  • javascript面向对象之创建对象
  • Python连接Oracle
  • uni-app项目数字滚动
  • vue 个人积累(使用工具,组件)
  • 安装python包到指定虚拟环境
  • 蓝海存储开关机注意事项总结
  • 码农张的Bug人生 - 见面之礼
  • 前端性能优化--懒加载和预加载
  • 手写一个CommonJS打包工具(一)
  • 无服务器化是企业 IT 架构的未来吗?
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 我们雇佣了一只大猴子...
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • $jQuery 重写Alert样式方法
  • (pojstep1.3.1)1017(构造法模拟)
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二)hibernate配置管理
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (原)本想说脏话,奈何已放下
  • (转)jdk与jre的区别
  • (转)德国人的记事本
  • (转载)深入super,看Python如何解决钻石继承难题
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 材料检测系统崩溃分析
  • .Net 代码性能 - (1)
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .net流程开发平台的一些难点(1)
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • /boot 内存空间不够
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • @Autowired标签与 @Resource标签 的区别