Linear Regression
假设函数:
成本函数:
- 真实值与预测值之间会有误差(): ;
- 假设误差独立且具有相同分布(均值为0,方差为..的高斯分布),;
- 由此,;
- 似然函数越大越好(极大似然估计,什么样的参数和数据组合后接近真实值),即目标函数越小越好。
最小化误差:
- 最小二乘法(目标函数偏导等于0,求解析解)
- 梯度下降优化 (下降方向+下降步长+下降次数)
数据清洗tips:
- Linear Assumption: transform data to make the relationship linear (e.g. log transform for an exponential relationship).
- Remove Noise: remove outliers in the output variable if possible.
- Remove Collinearity: calculae pairwise correlations for input data and remove the most correlated.
- Gaussian Distributions: use transforms (e.g. log or BoxCox) on input and output variables to make their distribution more Gaussian looking.
- Rescale Inputs: rescale input variables using standardization or normalization.
Logistic Regression
通过加入非线性变化的sigmoid函数,将线性回归的分值转化为概率
将 转化为
成本函数:
(极大似然估计取负求平均)
梯度下降:
- 初始化
- 或对数似然函数梯度上升求最大值
import numpy as np
#sigmoid函数:
def sigmoid(x):
return 1/(1+np.exp(-x))
#平均成本函数:
def cost(X, y, w)
return np.sum(np.multiply(-y, np.log(sigmoid(np.dot(X,w)))) - np.multiply(1-y, (-y, np.log(1-sigmoid(np.dot(X,w))))) / len(x)
#求解梯度:
def gradient(X, y, w):
grad = np.zeros(w.shape)
error = (sigmoid(np.dot(X,w)) - y)#.ravel()
for j in range(w):
grad[j] = np.sum(np.multiply(error, X[:,j])) / len(X)
return grad
#梯度下降:
def descent():
while True:
grad = gradient(X[k:k+batch_size], y[k:k+batch_size], w)
k += batch_size
#最大的循环次数/最小的每次迭代间损失函数的差/最小的梯度变化(求范数)
w = w- alpha*grad
sklearn参数:
- max_iter:
- penalty: 惩罚项的种类; l1, l2, none...; 默认l2
- C:正则化项系数的倒数;默认1
- multi_class:
- class_weight:
- solver: 优化算法
神经网络LR:
实际上可以将LR看做是仅含有一个神经元的单层的神经网络,激活函数为sigmoid函数
Notes
正则化: 为防止过拟合,在原始的损失函数后添加惩罚项
- L1正则化:权值向量中各元素的绝对值之和;可以产生用以特征选择(增加模型可解释性)的稀疏权值矩阵,一定程度上也可以防止模型过拟合。
- 加入L1正则化后,线性回归的代价函数为:,求偏导为:,对进行更新:;其中表示w的符号,因此可以看出L1正则化是通过加上或减去一个常量,让趋向于0;由此L1正则化对于小权重缩小快,对于大权重缩小慢,最终模型的权重会主要集中在高重要度的特征上,对于不重要的特征,权重会很快趋近于0。所以最终权重w会变得稀疏。
- 令,则我们的任务变为在的约束下求出取最小值的解,在图中的等值线与函数首次相交处即为最优解,而因为函数有很多突出的角(在坐标轴上,某些权重为0),所以等值线更容易与这些角相交,因此L1正则化更容易产生稀疏模型。此外系数可以控制L函数图像的大小,越大,L函数的图像越小(shrinkage)。
- L2正则化:权值向量 中各元素的平方和,再求平方根;可以防止模型过拟合。
- 二维平面下L2正则化的函数图像是个圆,与L1正则化的方形相比,被磨去了棱角,所以与相交时使得某个权重等于零的概率小了许多,因此L2正则化不具有稀疏性。
- 一般会在正则化项前添加一个系数,这个系数需要用户指定。
- 正则化与过拟合:拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。比如对于一个线性回归方程,如果参数很大,那么数据只要偏移一点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,即“抗扰动能力强”。越大的,可以使得代价函数最值时各参数也越小。
- 对于线性回归模型:使用L1正则化的模型建叫Lasso回归,使用L2正则化的模型叫Ridge回归。
Reference
maximum likelihood estimates, log-likelihood
多项式回归