机器学习-非线性回归( Unlinear Regression) -逻辑回归(Logistic Regression)算法

Posted YEN_csdn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习-非线性回归( Unlinear Regression) -逻辑回归(Logistic Regression)算法相关的知识,希望对你有一定的参考价值。

学习彭亮《深度学习基础介绍:机器学习》课程


概率

定义

概率(Probability): 对一件事情发生的可能性的衡量

范围

0 <= P <= 1

计算方法

  • 根据个人置信
  • 根据历史数据
  • 根据模拟数据

条件概率


即A在B发生的情况下的概率=AB同时发生的概率/B发生的概率


Logistic Regression (逻辑回归)

例子


以h(x) > 0.5来区分


以h(x) > 0.2来区分


基本模型

测试数据为X(x0,x1,x2···xn) /* x0...Xn都是自变量 */
要学习的参数为: Θ(θ0,θ1,θ2,···θn)

向量表示:
(*)

处理二值数据,引入Sigmoid函数时曲线平滑化
(**)

用这个函数来模拟0-1之间的变化

由(* * )(*)=>预测函数为

用概率表示
(y==1)
(X为自变量,Θ为待求参数,所以此表达式的意思为:给定X,Θ的情况下y=1的概率为多少)
(y==0)
(所以此表达式的意思为:给定X,Θ的情况下y=1的概率为多少)


Cost函数

线性回归:

直线的标准为:预测点和真实点距离的平方最小,即

  • m:m个实例
  • y(i):第i个实例的真实值为多少
  • x(i):每个实例自变量是多少
  • h(x(i)):每个实例自变量套用h(z)这个方程的函数值,即预测值(y_hat)

在线性方程中Cost函数:


此线性方程的目标就是要找到合适的 θ0,θ1使上式最小(即最小的Cost)

在回归方程中Cost函数:

(要找最小,所以加了-号;取对数方便加减、求导;把y=1时和y=0时的方程合并为J(Θ) )

所以现在的目标就是通过训练集训练并学习出一组Θ的值,使目标函数J(Θ)最小化


解法:梯度下降(Gradient Decent)

对于多元非线性函数的高维平面,从平面上的一个点出发,目标是找到一组Θ的值,使目标函数J(Θ)最小化,也就是找到上图中的最低点。所以就是梯度下降法:从某个点出发,求偏导,走下降的最快的,求导后找到斜率最大的方向,再走一步,重复…直到找到最低点

J(Θ)对Θj求偏导
alpha:学习率,就是每一步的步长
即每一步传进来后通过Θj-alpha*(J(Θ)对Θj求偏导)得到下一步的Θj

更新法则

  • alpha:学习率
  • i:不同的实例
  • 同时对所有Θ进行更新,重复更新直至收敛(小于设定的阈值)

#coding=utf-8

# @Author: yangenneng
# @Time: 2018-01-18 15:30
# @Abstract:非线性回归-逻辑回归算法

import numpy as np
import random

'''
# function:产生一些数据,用来做拟合
# numPoints:实例个数
# bias:随机生成y时的偏好
# variance:一组数据的方差
'''
def genData(numPoints,bias,variance):
    # 生成numPoints行2列的零矩阵  shape形状
    x = np.zeros(shape=(numPoints, 2))
    y = np.zeros(shape=(numPoints))
    # 循环numPoints次,及i=0 到 numPoints-1
    for i in range(0,numPoints):
        x[i][0] = 1
        x[i][1] = i
        # random.uniform(0,1)  从0-1之间随机产生一些数
        y[i] = (i+bias)+random.uniform(0, 1) * variance
    return x, y


'''
# 梯度下降算法
# x:自变量矩阵,每行表示一个实例
# y:实例的真实值
# theta:待求的参数
# alpha:学习率
# m:总共m个实例
# numIterations:重复更新的次数(重复更新直至收敛(小于设定的阈值))
'''
def gradientDescent(x,y,theta,alpha,m,numIterations):
    # 矩阵转置
    xTran = np.transpose(x)
    # 循环次数
    for i in range(0,numIterations):
        # 公式中的Z
        hypothesis = np.dot(x,theta)
        # loss:预测值-实际值
        loss = hypothesis-y
        # cost就是公式中J(Θ),这里定义的是一个简单的函数
        cost = np.sum(loss ** 2) / (2 * m)
        # 每次更新的更新量,即更新法则
        gradient=np.dot(xTran,loss)/m
        # Θ
        theta = theta-alpha * gradient
        print ("Iteration %d | cost :%f" % (i, cost))
    return theta

# 参数数据
x,y = genData(100, 25, 10)
print "x:", x
print "y:", y

# 查看产生数据的行列
m,n = np.shape(x)
n_y = np.shape(y)
print("m:"+str(m)+" n:"+str(n)+" n_y:"+str(n_y))

# 求Θ
numIterations = 100000
alpha = 0.0005
theta = np.ones(n)
theta= gradientDescent(x, y, theta, alpha, m, numIterations)
print(theta)


[ 29.45891223 1.014378 ]表示Θ1、Θ2(因为X是二维的)

以上是关于机器学习-非线性回归( Unlinear Regression) -逻辑回归(Logistic Regression)算法的主要内容,如果未能解决你的问题,请参考以下文章

推荐|TensorFlow/PyTorch/Sklearn实现的五十种机器学习模型

python机器学习回归算法-线性回归

机器学习线性回归(回炉重造)

机器学习:线性模型学习总结:线性回归

如何搞懂机器学习中的线性回归模型?机器学习系列之线性回归基础篇

机器学习-第二节:机器学习模型之线性回归