对于给定的训练集数据,线性鬼给的目的是找到一个与这些数据最为吻合的线性函数。一般情况下线性回归模型假设函数为:
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=1∑nwixi+b=wTx+b其中, w ∈ R n w \in \mathbf{R}^{n} w∈Rn 与 b ∈ R b \in \mathbf{R} b∈R 为模型参数, 也称为回归系数。为了方便, 通常将 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=0∑nwixi=wTx其中, w ∈ R n + 1 w \in \mathbf{R}^{n+1} w∈Rn+1,通过训练确定模型参数 w w w后,可使用模型对新的输入示例进行预测。
∇ 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=k∑k+N(wTxi−yi)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=k∑k+N(wTxi−yi)xi
红酒数据集文件
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
这篇博客对于上述的参数有详细的解释
idx = y != 3
x = x[idx]
y = y[idx]
y -= 1
这样数据准备工作都完成了
LogisticRegression的超参数如下:
梯度下降最大迭代次数 n_iter
学习率 eta
损失降低阈值tol(tol不为None时, 开启早期停止法)
from logistic_regression import LogisticRegression
# 梯度下降最大迭代次数 n_iter, 学习率 eta, 损失降低阈值tol(tol不为None时, 开启早期停止法)
clf = LogisticRegression(n_iter = 2000, eta = 0.01, tol = 0.0001)
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)
x1 = x.mean(axis = 0) # mean代表均值, axis代表垂直方向,就是每个列的数据集(每个特征就是一列)
x2 = x.var(axis = 0) # var代表方差
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,提到归一化的方法