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

内容:线性回归;逻辑回归,应用场景。

一、线性回归

有监督学习,根据学习样本{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 thetadef 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())

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

时间: 2024-10-03 22:55:47

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

python机器学习实战(四)

python机器学习实战(四) 版权声明:本文为博主原创文章,转载请指明转载地址 www.cnblogs.com/fydeblog/p/7364317.html 前言 这篇notebook是关于机器学习中logistic回归,内容包括基于logistic回归和sigmoid分类,基于最优化方法的最佳系数确定,从疝气病症预测病马的死亡率.操作系统:ubuntu14.04  运行环境:anaconda-python2.7-jupyter notebook 参考书籍:机器学习实战和源码   noteb

机器学习总结之逻辑回归Logistic Regression

机器学习总结之逻辑回归Logistic Regression 逻辑回归logistic regression,虽然名字是回归,但是实际上它是处理分类问题的算法.简单的说回归问题和分类问题如下: 回归问题:预测一个连续的输出. 分类问题:离散输出,比如二分类问题输出0或1. 逻辑回归常用于垃圾邮件分类,天气预测.疾病判断和广告投放. 一.假设函数 因为是一个分类问题,所以我们希望有一个假设函数,使得: 而sigmoid 函数可以很好的满足这个性质: 故假设函数: 其实逻辑回归为什么要用sigmoi

机器学习(4)之Logistic回归

机器学习(4)之Logistic回归 1. 算法推导 与之前学过的梯度下降等不同,Logistic回归是一类分类问题,而前者是回归问题.回归问题中,尝试预测的变量y是连续的变量,而在分类问题中,y是一组离散的,比如y只能取{0,1}. 假设一组样本为这样如图所示,如果需要用线性回归来拟合这些样本,匹配效果会很不好.对于这种y值只有{0,1}这种情况的,可以使用分类方法进行. 假设,且使得 其中定义Logistic函数(又名sigmoid函数): 下图是Logistic函数g(z)的分布曲线,当z

结对编程-黄金点游戏之旅[四]

(游戏已上线,更多信息请戳底部链接▼) <--戳这个链接也会跳的哦, 了解游戏规则戳这里-->游戏规则 我的队友: 张波(进入博客请戳底部链接) 性格开朗,人很随和,不想写代码的时候都是他主动拉着我去写的,工作认真负责,有分歧的地方或者逻辑不顺的地方我们都会仔细讨论 主要负责写后台的业务逻辑,登陆.注册.开始游戏等小功能的后台代码 遵照代码规范.每次他写完后我都会做Code Review,虽然没有自动化测试,没有性能分析,但是我会单步调试,分析每一行代码的逻辑和作用 我: 李洋洋 主要负责前端

《机器学习实战》Logistic回归算法(1)

===================================================================== <机器学习实战>系列博客是博主阅读<机器学习实战>这本书的笔记也包含一些其他python实现的机器学习算法 算法实现均采用python github 源码同步:https://github.com/Thinkgamer/Machine-Learning-With-Python ==================================

机器学习九大算法---回归

机器学习九大算法---回归 转自:http://blog.csdn.net/xiaohai1232/article/details/59551240 回归分析即,量化因变量受自变量影响的大小,建立线性回归方程或者非线性回归方程,从而达对因变量的预测,或者对因变量的解释作用. 回归分析流程如下: ①探索性分析,画不同变量之间的散点图,进行相关性检验等,了解数据的大致情况,以及得知重点关注那几个变量: ②变量和模型选择,: ③回归分析假设条件验证: ④共线性和强影响点检查: ⑤模型修改,并且重复③④

遵循统一的机器学习框架理解逻辑回归

遵循统一的机器学习框架理解逻辑回归 标签: 机器学习 LR 分类 一.前言 我的博客不是科普性质的博客,仅记录我的观点和思考过程.欢迎大家指出我思考的盲点,更希望大家能有自己的理解. 本文参考了网络上诸多资料. 二.理解 统一的机器学习框架(MLA): 1.模型(Model) 2.策略(Loss) 3.算法(Algorithm) 按照如上所说框架,LR最核心的就是损失函数使用了 Sigmoid 和 Cross Entropy . LR: Sigmoid + Cross Entropy Model

机器学习-正则化(岭回归、lasso)和前向逐步回归

机器学习-正则化(岭回归.lasso)和前向逐步回归 本文代码均来自于<机器学习实战> 这三种要处理的是同样的问题,也就是数据的特征数量大于样本数量的情况.这个时候会出现矩阵不可逆的情况,为什么呢? 矩阵可逆的条件是:1. 方阵 2. 满秩 X.t*X必然是方阵(nxmxmxn=nxn,最终行列数是原来的X矩阵的列数,也就是特征数),但是要满秩的话,由于线性代数的一个结论,X.t*X的秩不会比X大,而X的秩是样本数和特征数中较小的那一个,所以,如果样本数小于特征数的话,X.t*X就不会是可逆的

Hexo之旅(四):文章编写技巧

hexo 编写文章可以使用以下命令创建hexo new "文件名" #创建的文章会在_pots目录下文章的后缀名是以md命名的文件格式,遵循markdown语法,所以编写文章可以使用markdown语法进行书写我们的文章,相当方便.快速! 分类及标签添加 新建一篇文章默认是没有分类及标签的,可以手动进行修改.然而文章就会自动分类以及加上对应的标签了 12 tags: 标签名 categories: 分类名 文章过长,使用阅读全文分屏 介绍一种比较简单的方式:只需要在文章内容需要分割的地