<机器学习练习>逻辑斯谛回归
来源:互联网 发布:糖豆网广场舞软件下载 编辑:程序博客网 时间:2024/05/29 09:47
一:线性回归
线性回归假设特征和结果满足线性关系。线性回归,就是线性拟合,拟合就是找到那条线,对残差平方和最小的那条直线。
比如说:我们要模拟房子的大小(
如果我们把
对于
对于使用,残差平方和来作为损失函数,利用最大似然估计,来给出解释。
由于线性回归模型中,
对于任意样本
则其似然函数为:
然后,对似然函数取对数:
因此,最大似然函数估计
二:逻辑斯谛回归
逻辑斯谛回归,名称上是回归,其实是
1)逻辑斯谛模型满足的条件概率分布:
如果对于测试样本
2)参数
利用最大似然法估计模型参数。
1:写出条件概率分布函数 2:写出似然函数(训练样本满足独立,则其条件概率密度函数连乘) 3:写出对数似然函数,求导,等于0.(参数是个向量,则分别进行求偏导)
对于逻辑斯谛回归来说,是梯度上升法来求对数似然函数的极大值的。
其中
其中似然函数如下:
当参数是向量时,分部进行求偏导计算。
3)程序
# -*- coding: utf-8 -*-from numpy import *def loadDataSet (): #构造数据集 和标签 dataMat=[]; labelMat=[]; fr=open('testSet.txt') for line in fr.readlines(): lineArr=line.strip().split() dataMat.append([1.0,float(lineArr[0]),float(lineArr[1])]) #每个数据集,最前面追加1,x0=1; labelMat.append(int(lineArr[2])) return dataMat,labelMatdef sigmoid (inX): #sigmoid 函数 return 1.0/(1+exp(-inX))#随机梯度算法,一次迭代 :分别随机的选择数据,# 进行更新w,进行m次运算def stocGradAscent1 (dataMatrix,classLabels,numIter=150): m,n=shape(dataMatrix) #m个数据 n 个特征 weights=ones(n) #初始化权重 for j in range(numIter): dataIndex=range(m) for i in range(m): alpha=4/(1.0+i+j)+0.01; # 步长不是定值 randIndex=int(random.uniform(0,len(dataIndex))) h=sigmoid(sum(dataMatrix[randIndex]*weights)) error=(classLabels[randIndex]-h) weights=weights+alpha*error*dataMatrix[randIndex] del(dataIndex[randIndex]) return weights#梯度上生法: 一次迭代,整个数据一次进行运算。def gradAscent (dataMatIn,classLabels): dataMatrix=mat(dataMatIn) labelMat=mat(classLabels).transpose() m,n=shape(dataMatrix) alpha=0.001 maxCycles=20 weights=ones((n,1)) for k in range(maxCycles): h=sigmoid(dataMatrix*weights) error=(labelMat-h) weights=weights+alpha*dataMatrix.transpose()*error return weights#画图函数def plotBestFit (wei): import matplotlib.pyplot as plt weights=array(wei) dataMat,labelMat=loadDataSet() dataArr=array(dataMat) n=shape(dataArr)[0] xcord1=[]; ycord1=[]; xcord2=[]; ycord2=[]; for i in range(n): if int(labelMat[i])==1: xcord1.append(dataArr[i,1]); ycord1.append(dataArr[i,2]); else: xcord2.append(dataArr[i,1]); ycord2.append(dataArr[i,2]); fig=plt.figure() ax=fig.add_subplot(111) ax.scatter(xcord1,ycord1,s=30,c='red',marker='s') ax.scatter(xcord2,ycord2,s=30,c='green',marker='s') x=arange(-3.0,3.0,0.1) y=(-weights[0]-weights[1]*x)/weights[2] ##由sigmoid 可知:0=w0+w1*x1+w2*x2为分类线 ax.plot(x,y) plt.xlabel('X1'); plt.ylabel('X2'); plt.show()
分类的结果:
下面给出对于新样本的分类函数。
#分类判别 def classifyVector (inX,weights): prob=sigmoid(sum(inX*weights)) if prob>0.5: return 1.0 else: return 0.0
参考文献:
斯坦福机器学习,吴恩达。
《机器学习实战》。
0 0
- <机器学习练习>逻辑斯谛回归
- 机器学习练习三:逻辑回归
- 机器学习练习之逻辑斯谛回归和牛顿方法
- 机器学习-逻辑回归
- 机器学习:逻辑回归
- 机器学习---逻辑回归
- 【机器学习】逻辑回归
- 机器学习----逻辑回归
- 机器学习 逻辑回归
- 机器学习:逻辑回归
- 机器学习--逻辑回归
- 机器学习-逻辑回归
- 机器学习-- 逻辑回归
- 机器学习-逻辑回归
- 机器学习-逻辑回归
- 【机器学习】--逻辑回归
- 机器学习练习(三)——逻辑回归
- 机器学习练习(四)——多元逻辑回归
- 形态学滤波
- C++作业7—最大公约和和最小公倍数/特殊三位数
- 词袋模型和词向量模型
- 搜嘎
- Keil MDK编译器的数据类型定义
- <机器学习练习>逻辑斯谛回归
- Android代码中取消废弃代码的删除线
- EF中生成edmx文件的俩种方式
- 将字符串长度进行剪切
- C++第七次实验-素数和回文
- windows搭建solr5.4.1全文搜索引擎
- 利用JavaScript DOM 检查表单
- 异常
- 上机报告7-1项目一素数和回文