Python机器学习算法 —— 回归

1.1 线性回归模型

对于给定的训练集数据,线性鬼给的目的是找到一个与这些数据最为吻合的线性函数。一般情况下线性回归模型假设函数为:
h w , b ( x ) = ∑ i = 1 n w i x i + b = w T x + b h_{w, b}(x)=\sum_{i=1}^{n} w_{i} x_{i}+b=w^{\mathrm{T}} x+b hw,b(x)=i=1nwixi+b=wTx+b其中, w ∈ R n w \in \mathbf{R}^{n} wRn b ∈ R b \in \mathbf{R} bR 为模型参数, 也称为回归系数。为了方便, 通常将 b b b 纳 句量 w w w, 作为 w 0 w_{0} w0, 同时为输入向量 x x x 添加一个常数 1 作为 x 0 x_{0} x0 :
w = ( b , w 1 , w 2 , . . . . , w n ) T w =(b,w_{1},w_{2},....,w_{n})^{\mathrm{T}} w=(b,w1,w2,....,wn)T x = ( 1 , x 1 , x 2 , . . . , x n ) T x =(1,x_{1},x_{2},...,x_{n})^{\mathrm{T}} x=(1,x1,x2,...,xn)T假设函数为: h w ( x ) = ∑ i = 0 n w i x i = w T x h_{w}(x)=\sum_{i=0}^{n} w_{i} x_{i}=w^{\mathrm{T}} x hw(x)=i=0nwixi=wTx其中, w ∈ R n + 1 w \in \mathbf{R}^{n+1} wRn+1,通过训练确定模型参数 w w w后,可使用模型对新的输入示例进行预测。

1.2 最小二乘法

∇ J ( w ) = 1 N ∑ i = k k + N ( w T x i − y i ) x i \nabla J(w)=\frac{1}{N} \sum_{i=k}^{k+N}\left(w^{\mathrm{T}} x_{i}-y_{i}\right) x_{i} J(w)=N1i=kk+N(wTxiyi)xi

小批量梯度下降算法的参数更新公式为:
w : = w − η 1 N ∑ i = k k + N ( w T x i − y i ) x i w:=w-\eta \frac{1}{N} \sum_{i=k}^{k+N}\left(w^{\mathrm{T}} x_{i}-y_{i}\right) x_{i} w:=wηN1i=kk+N(wTxiyi)xi

项目实战

Logistic回归

1. 数据准备

红酒数据集文件

  • 步骤1:调用numpy中genfromtxt函数加载数据集
import numpy as np
x = np.genfromtxt('wine.data',delimiter=",",usecols = range(1,14)) 
#读取第2到最大14列
y = np.genfromtxt('wine.data',delimiter = ',',usecols = 0)

1、参数delimiter: 分隔符,将每行中的元素分割为列的字符或者字符串,一般是用“,”,一系列整数作为参数也可以
2、参数usecols:读取的列数,一般默认是从0-max

这篇博客对于上述的参数有详细的解释

  • 步骤2:使用logistic回归鉴别第1类和第2类红酒,因为Logistic回归只能处理二元分类问题,需要将数据集第3类红酒样本去除
idx = y != 3
x = x[idx]
y = y[idx]
  • 步骤3:目前y中类的标记为1和2,转换为算法使用的0和1
y -= 1

这样数据准备工作都完成了

2. 模型训练与测试

LogisticRegression的超参数如下:

梯度下降最大迭代次数 n_iter
学习率 eta
损失降低阈值tol(tol不为None时, 开启早期停止法)

  • 步骤1:以超参数(n_iter = 2000, eta = 0.01, tol = 0.0001)创建模型
from logistic_regression import LogisticRegression
# 梯度下降最大迭代次数 n_iter, 学习率 eta, 损失降低阈值tol(tol不为None时, 开启早期停止法)
clf = LogisticRegression(n_iter = 2000, eta = 0.01, tol = 0.0001)
  • 步骤2:调用sklearn中的train_test_split函数将数据集分为训练集和测试集,比例为7:3
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3)
  • 步骤3:在应用梯度下降法时应保证各特征值相差不大。观察下面数据集特征均值及方差
x1 = x.mean(axis = 0) # mean代表均值, axis代表垂直方向,就是每个列的数据集(每个特征就是一列)
x2 = x.var(axis = 0) # var代表方差
  • 步骤4:由于其中一些的特征值差别较大,需要用sklearn中的StandardScaler函数对各个特征值进行缩放
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss1 = ss.fit(x_train) # fit用于计算训练数据的均值和方差, 后面会用均值和方差来转换训练数据

print(ss1): 结果是StandardScaler(copy=True, with_mean=True, with_std=True)
1、sklearn.preprocessing.StandardScaler(copy=True, with_mean=True, with_std=True)这个函数用于给数据进行去均值和方差归一化处理
2、copy:如果为false,就会用归一化的值替代原来的值;如果被标准化的数据不是np.array或scipy.sparse CSR matrix, 原来的数据还是被copy而不是被替代
3、with_std:boolean类型,默认为True,表示将数据方差规范到1
4、with_mean:boolean类型,默认为True,表示将数据均值规范到0
总结: 这里是用于标准化,将数据的方差规范到1,均值规范到0,实际上就是标准正态分布的方差和均值

关于StandScaler中fit、transform区别的解释文章
Sklearn之数据预处理——StandardScaler,提到归一化的方法

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2021 Nqq

你的鼓励是我学习的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值