数据挖掘算法-python实现:Logical回归
比如说我们有两类数据,各有50十个点组成,当我门把这些点画出来,会有一条线区分这两组数据,我们拟合出这个曲线(因为很有可能是非线性),就是回归。我们通过大量的数据找出这条线,并拟合出这条线的表达式,再有数据,我们就以这条线为区分来实现分类。下图是我画的一个数据集的两组数据,中间有一条区分两组数据的线。
sigmoid函数
我们看到了上图中两组数据的划分,那么我们怎么来找出两组数据的边界表达式呢,这里用到sigmoid函数。它的形状大致是(如下),公式
把数据集的特征值设为x1,x2,x3......。我们要求出它们的回归系数。只要设z=w1*x1+w2*x2.....用sigmoid函数出理是防止数据从0到1发生跳变,因为目标函数是0到1,我们要把带入x1,x2...多项式数据控制在这之间。
梯度上升算法
梯度上升是指找到函数增长的方向。在具体实现的过程中,不停地迭代运算直到w的值几乎不再变化为止。
代码
数据集在工程中有。
代码下载地址:https://github.com/X-Brain/MachineLearning
导入数据集,并定义sigmoid函数
[python] view plaincopy
def loadDataSet():
dataMat = []; labelMat = []
fr = open('/Users/hakuri/Desktop/testSet.txt')
for line in fr.readlines():
lineArr = line.strip().split()
dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])
labelMat.append(int(lineArr[2]))
return dataMat,labelMat
def sigmoid(inX):
return 1.0/(1+exp(-inX))
返回回归系数,对应于每个特征值,for循环实现了递归梯度上升算法。
[python] view plaincopy
def gradAscent(dataMatIn, classLabels):
dataMatrix = mat(dataMatIn) #convert to NumPy matrix
labelMat = mat(classLabels).transpose() #convert to NumPy matrix
m,n = shape(dataMatrix)
alpha = 0.001
maxCycles = 500
weights = ones((n,1))
for k in range(maxCycles): #heavy on matrix operations
h = sigmoid(dataMatrix*weights) #matrix mult
error = (labelMat - h) #vector subtraction
weights = weights + alpha * dataMatrix.transpose()* error #matrix mult
return weights
结果,返回了特征值的回归系数。我们的数据集有两个特征值分别是x1,x2。我们又增设了了x0变量。得到的结果
[[ 4.12414349]
[ 0.48007329]
[-0.6168482 ]]
我们得出x1和x2的关系(设x0=1),0=4.12414349+0.48007329*x1-0.6168482*x2
画出x1与x2的关系图
(本文发布于http://blog.csdn.net/buptgshengod)
- 常用翻译技巧
- ScintillaNET 需要帮助
- Windows Live Writer工具
- WPF/XML 资源及相关开源项目
- Android应用底部导航栏(选项卡)实例
- 有关 ASMX 2.0、WSE 3.0 和 WCF 的内容
- 微信小程序游戏其实一般,我也就站在寒风里玩了一个小时
- beagle MONO 应用的desktop search
- Python3与OpenCV3.3 图像处理(一)-环境搭建与简单DEMO
- winform中利用正则表达式得到有效的电话/手机号
- 浅述RDF,畅想一下FOAF应用
- 数据源控件参数类Parameter
- 我们来继续研究 mybatis 框架sql映射文件的属性
- 开源.NET邮件服务器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浅谈PHP SHA1withRSA加密生成签名及验签
- PHP PDO数据库操作预处理与注意事项
- laravel 框架配置404等异常页面
- Django –Xadmin 判断登录者身份实例
- Laravel 队列使用的实现
- keras 两种训练模型方式详解fit和fit_generator(节省内存)
- Keras 中Leaky ReLU等高级激活函数的用法
- Python错误的处理方法
- python3的pip路径在哪
- MySQL 案例:init_connect 引发的 Lost connection
- PHP一个简单的无需刷新爬虫
- PHP实现函数内修改外部变量值的方法示例
- PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
- PHP命名空间简单用法示例
- PHP array_shift()用法实例分析