码迷,mamicode.com
首页 > 其他好文 > 详细

我的机器学习之旅(四):回归与工程应用

时间:2018-03-25 14:27:24      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:向量   [1]   lambda   定义   sig   image   number   基本   alt   

内容:线性回归;逻辑回归,应用场景。技术分享图片

一、线性回归

有监督学习,根据学习样本{x->y},学习一个映射f:X->Y(线性相关),输出预测结果y_i。最简单的例子:y=ax+b

重要组成:训练数据集 training set, 学习算法 learning algorithm, 损失函数 loss function.

训练数据集:x-->y的对应数据

损失函数cost: 权衡训练到的x-y的映射的好坏,最小化这个损失函数。 比较常见的最小二乘法,一般为凸函数

学习算法:梯度下降,逐步最小化损失函数,朝着斜率为负的方向迈进。关键知识点:学习率,终止条件,欠/过拟和,正则化

过拟合:特征过多,对源数据拟合的很好但是丧失了一般性,对预测样本预测效果差

欠拟合:模型没有很好地捕捉到数据特征,不能够很好地拟合数据 。

正则化:类似于模型参数与误差的平方和最小(L2).

例,拟合一个y=ax+b.

取X_i=[x1,x2]^T,$$\theta=[a,b], y_i=\theta*X$$

技术分享图片技术分享图片

python代码实现:

##梯度下降的过程
import numpy as np

def gradientDesc(x,y, theta=np.zeros((2,1)),alpha=.01,iterations=1000):
    m=y.size
J=[]

for numbers in range(iterations):
a = theta[0][0] - alpha * (1 / m) * sum((x.dot(theta).flatten() - y.flatten() ) * x[:, 0])
b = theta[1][0] - alpha * (1 / m) * sum((x.dot(theta).flatten() - y.flatten() ) * x[:, 1])
theta[0][0],theta[1][0] = a,b
J.append(cost(x,y,theta))
if numbers%100==0:print("第%d步:%.3f,%.3f"%(numbers+100,theta[0][0],theta[1][0]))
return theta
def cost(x,y,theta=np.zeros((2,1))):
m=len(x)
J = 1 / (2 * m) * sum((x.dot(theta).flatten() - y) ** 2)
return J

##测试
x=np.array([[1,2],[2,1],[3,1],[4.1,1]])
y=np.array([[1],[2],[3],[4.1]])

theta = gradientDesc(x,y)

二、逻辑回归

 逻辑回归一般解决分类问题,离散点,回归+阈值(sigmoid),损失函数--》判定边界。多分类可以设计多个分类器。技术分享图片

梯度:

技术分享图片

基本函数:

#### 带正则化项的损失函数
#### $$ J(\theta) = \frac{1}{m}\sum_{i=1}^{m}\big[-y^{(i)}\, log\,( h_\theta\,(x^{(i)}))-(1-y^{(i)})\,log\,(1-h_\theta(x^{(i)}))\big] + \frac{\lambda}{2m}\sum_{j=1}^{n}\theta_{j}^{2}$$
#### 向量化的损失函数
#### $$ J(\theta) = \frac{1}{m}\big((\,log\,(g(X\theta))^Ty+(\,log\,(1-g(X\theta))^T(1-y)\big) + \frac{\lambda}{2m}\sum_{j=1}^{n}\theta_{j}^{2}$$

#### 偏导(梯度)

#### $$ \frac{\delta J(\theta)}{\delta\theta_{j}} = \frac{1}{m}\sum_{i=1}^{m} ( h_\theta (x^{(i)})-y^{(i)})x^{(i)}_{j} + \frac{\lambda}{m}\theta_{j}$$
#### 向量化
#### $$ \frac{\delta J(\theta)}{\delta\theta_{j}} = \frac{1}{m} X^T(g(X\theta)-y) + \frac{\lambda}{m}\theta_{j}$$
##### $$\text{Note: 要注意的是参数 } \theta_{0} \text{ 是不需要正则化的}$$

##定义sigmoid函数
def sigmoid(z):
    return(1 / (1 + np.exp(-z)))

# 定义损失函数
def costFunctionReg(theta, reg, *args):
m = y.size
h = sigmoid(XX.dot(theta))

J = -1 * (1 / m) * (np.log(h).T.dot(y) + np.log(1 - h).T.dot(1 - y)) + (reg / (2 * m)) * np.sum(
np.square(theta[1:]))

if np.isnan(J[0]):
return (np.inf)
return (J[0])


def gradientReg(theta, reg, *args):
m = y.size
h = sigmoid(XX.dot(theta.reshape(-1, 1)))

grad = (1 / m) * XX.T.dot(h - y) + (reg / m) * np.r_[[[0]], theta[1:].reshape(-1, 1)]

return (grad.flatten())

 

我的机器学习之旅(四):回归与工程应用

标签:向量   [1]   lambda   定义   sig   image   number   基本   alt   

原文地址:https://www.cnblogs.com/allenren/p/8641950.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!