一、概率

  在引入问题前,我们先复习下数学里面关于概率的基本概念

  概率:对一件事发生的可能性衡量

  范围:0<=P<=1

  计算方法:根据个人置信区间;根据历史数据;根据模拟数据。

  条件概率:B发生的条件下,A发生的概率

  

二、Logistic Regression(逻辑回归)

1、问题引入

  处理二值数据时,如果一直8个测试数据集为如下所示,我们利用线性回归方程,建立回归方程曲线,图形显示,并不能很好的模拟回归问题,也就是我们所说的欠回归。

  

  如果继续引入第9个测试点,我们发现欠回归情况更加严重,因此我们需要引入一个新的回归模型,来解决该类模型欠回归问题。

  

2、简单推导过程

  假设测试数据为X(x0,x1,x2···xn)

  要学习的参数为:Θ(θ0,θ1,θ2,···θn)

向量表示:

  观察Logistic函数曲线,我们发现在0到负无穷时,函数值趋向于0,0到正无穷时函数曲线趋向于1,且当z等于0时,函数值为0.5,于是我们可以引入该函数,对预测方程进行再次转换,由数值上的计算转换为0,1概率上的计算,即:

  

  

不同于线性回归模型:,定义一个新的预测函数为:

  于是问题从对Z函数求最优theta参数值,变为对h函数求最优theta参数值。对二值问题,可转换为如下表述:

  

根据一般方法,首先定义新的cost函数,然后根据cost函数来反向更新参数theta值,如下为新的cost函数:

  

为了计算方便,我们对其转化为:

两个式子可以进行合并,最终化简为最终的cost函数:

该式为非线性方程,通过求导来计算极值很复杂,我们引入之前的梯度下降算法,来不断的估计新的参数值

最终更新法则为:

3、实际编程应用

  如下为一个通用的非线性回归方程,在利用梯度下降算法反向更新theta参数值时,没有使用如下更新法则,而是使用通用方法,如下是具体代码:

  

import numpy as np
import random # 梯度下降算法来更新参数值
# x,y:测试数据集及标签值,theta:学习的参数值,alpha:学习率,m:测试数据集个数,numIterations:重复更新次数
def gradientDescent(x,y,theta,alpha,m,numIterations):
xTrans = np.transpose(x)
for i in range(0,numIterations):
hypothesis = np.dot(x,theta)
loss = hypothesis - y
# 定义一个通用的更新法则7
cost = np.sum(loss**2)/(2*m)
if i % 10000 == 0:
print("Iteration %d | Cost:%f"%(i,cost))
gradient = np.dot(xTrans,loss)/m
theta = theta - alpha*gradientreturn theta # 生成测试数据
# numPoints:测试数据集行数,bias:偏向,variance:方差
def genData(numPoints,bias,variance):
x = np.zeros(shape=(numPoints,2))
y = np.zeros(shape=numPoints)
for i in range(0,numPoints):
x[i][0] = 1
x[i][1] = i
# uniform随机产生一些数字
y[i] = (i + bias) + random.uniform(0,1) + variance
return x,y x,y = genData(100,25,10)
m,n = np.shape(x)
print(x,y)
theta = np.ones(n)
alpha = 0.0005
theta = gradientDescent(x,y,theta,alpha,m,100000)
print(theta)

  最终的结果如下,结果显示,随着训练次数的增加,目标函数也在不断的减小:

  

day-13 python库实现简单非线性回归应用的更多相关文章

  1. C# 调用Python库 最简单方法

    起个头,技术性文章应该言简意赅(因我看到外国回答问题都是可以一句代码解决的,绝不会写第二句),实现功能无误再贴出文章. 首先我不用 IronPython来写这个.py文件,因为我有Pycharm,而且 ...

  2. python GUI实战项目——tkinter库的简单实例

    一.项目说明: 本次通过实现一个小的功能模块对Python GUI进行实践学习.项目来源于软件制造工程的作业.记录在这里以复习下思路和总结编码过程.所有的源代码和文件放在这里: 链接: https:/ ...

  3. python requests库的简单运用

    python requests的简单运用 使用pycharm获取requests包 ctrl+alt+s Project:pythonProject pythoninterpreter 点+号搜索 使 ...

  4. 11个并不广为人知,但值得了解的Python库

    这是一篇译文,文中提及了一些不常见但是有用的Python库 原文地址:http://blog.yhathq.com/posts/11-python-libraries-you-might-not-kn ...

  5. 13.python笔记之pyyaml模块

    Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ...

  6. 你可能没听过的11个Python库

    目前,网上已有成千上万个Python包,但几乎没有人能够全部知道它们.单单 PyPi上就有超过47000个包列表. 现在,越来越多的数据科学家开始使用Python,虽然他们从 pandas, scik ...

  7. Python 库/模块/工具收集

    1 算法 1.1 字符串处理 re 正则表达式的标准库. StringIO / cStringIO 以读写文件的方式来操作字符串(有点类似于内存文件). cStringIO 是 C 语言实现的,提供高 ...

  8. python之pandas简单介绍及使用(一)

    python之pandas简单介绍及使用(一) 一. Pandas简介1.Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据 ...

  9. 1.3 Essential Python Libraries(一些重要的Python库)

    1.3 Essential Python Libraries(一些重要的Python库) 如果不了解Python的数据生态,以及本书中即将用到的一些库,这里会做一个简单的介绍: Numpy 这里就不过 ...

随机推荐

  1. <head> 中的 JavaScript 函数

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  2. PL/SQL 数组的使用

    一.固定数组 1.在模式(schema)级创建VARRAY类型 语法: CREATE OR REPLACE TYPE varray_type_name IS VARRAY(n) OF <elem ...

  3. Flask—03-bootstrap与表单

    bootstrap与表单 Bootstrap是美国Twitter公司的设计师Mark Otto和Jacob Thornton合作基于HTML.CSS.JavaScript 开发的简洁.直观.强悍的前端 ...

  4. SAP HCM 前台字段显示与隐藏

    https://blog.csdn.net/qq_29475437/article/details/82107452 1.在hcm屏幕上 确定 程序名称 与屏幕编号 2.SM30 输入 T588M,如 ...

  5. Mac mysql安装失败解决方法

    在mac终端通过命令安装mysql,提示错误,解决方法如下: (1)安装命令:brew install mysql (2)提示错误: Error:Could not create /usr/local ...

  6. javascript--鼠标拖拽窗口案例(鼠标按下,在鼠标移动过程中,盒子跟着一起移动,鼠标松开,盒子停止移动)

    界面如图所示: 要求:在“信息注册”栏,按下鼠标,然后鼠标在页面移动,在鼠标移动过程中,该窗口跟着鼠标移动,当鼠标松开的时候,窗口停止移动.点击“关闭”,该窗口隐藏. 实现思路: 1.页面结构分析:一 ...

  7. MAthJax入门教程(五分钟上手)

    最近在研究,在页面中显示一些数学公式.搞得我很头疼. 据说MathJax会统一这已领域.所以去学了学.网上教程特别多.繁杂. 说的清楚的特别少. 我是这么跑通的,: 1.在官网下载代码地址为:http ...

  8. 文件 I/O缓冲流

    import java.io.File; import java.io.Writer; import java.util.StringTokenizer; import java.io.Reader; ...

  9. 002---Python基本数据类型--字符串

    字符串 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1p ...

  10. Kubernetes-DNS

    Kubernetes提供的虚拟DNS服务名为skydns,由四个组件组成: etcd:DNS存储 kube2sky:将Kubernetes Master中的Service(服务)注册到etcd sky ...