MLA Review之四:logistic回归
来源:互联网 发布:ubuntu live桌面用户名 编辑:程序博客网 时间:2024/04/29 11:51
终于来到logistic回归,logistic回归其实很简单,之前的说到的神经网络就用到了这个方法,其中最重要的就是使用了sigmoid损失函数。当然使用的方法也就最简单的梯度下降法,这里并没有使用之前神经网络的随机梯度下降法,也是为了简单起见。因为之前在神经网络里面使用过了,所以这篇文章就略微介绍下。
logistic回归是属于广义线性回归的一种,基本形式:
z=w0+w1*x1+w2*x2+...+wn*xn
s=1/(1+exp(-z))
损失函数:1/2* (s-y)^2
然后按照梯度下降方法求解参数即可
代码如下:
- # -*- coding: UTF8 -*-
- """
- author:luchi
- date:16/2/19
- desc:
- logistic回归,最常用的回归问题,虽然是回归但是更多的是用到了分类的问题上
- 其主要的函数是sigmoid,以及使用的训练参数方法也是最常使用的梯度下降法
- """
- import math
- import numpy as np
- def loadDataset():
- retDataset=[]
- retLabels=[]
- fr=open("testSet.txt")
- for str in fr.readlines():
- strList=str.strip().split()
- retDataset.append([1.0,float(strList[0]),float(strList[1])])
- retLabels.append(int(strList[2]))
- return retDataset,retLabels
- """
- 计算sigmoid函数
- """
- def sigmoid(inX):
- return 1.0/(1+np.exp(-inX))
- """
- 梯度下降方法训练参数
- """
- def GradientDecrease(epoch,dataset,labels,alpha):
- weight=np.ones((len(dataset[0]),1)) #初始化权重
- weightMat=np.mat(weight)
- datasetMat=np.mat(dataset)
- labelsMat=np.mat(labels).transpose()
- size=len(dataset)
- for i in range(epoch):
- result=datasetMat*weightMat
- result=sigmoid(result)
- error=result-labelsMat
- # print result
- # print 1-result
- grad=np.multiply(result,1-result)
- # print grad
- # print alpha*multiply(multiply(error,grad),datasetMat)
- nweightMat=np.multiply(np.multiply(error,grad),datasetMat)
- # print np.sum(nweightMat,axis=0)/float(size)
- weightMat=weightMat-alpha*(np.sum(nweightMat,axis=0)/float(size)).transpose()
- # print weightMat
- # print weightMat
- return weightMat
- def plotBestFit(weights):
- import matplotlib.pyplot as plt
- dataMat,labelMat=loadDataset()
- dataArr = np.array(dataMat)
- n = np.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')
- x = np.arange(-3.0, 3.0, 0.1)
- y = (-weights[0]-weights[1]*x)/weights[2]
- print len(y)
- ax.plot(x, y)
- plt.xlabel('X1'); plt.ylabel('X2');
- plt.show()
- dataset,labels=loadDataset()
- # dataset=np.array([[1,1,2],[1,2,3]])
- # labels=np.array([0,1])
- weights=GradientDecrease(500,dataset,labels,alpha=0.25)
- print weights
- plotBestFit(np.array(weights))
结果如下:
从图中可以看出效果还不错。
logistic回归是一种比较简单的方法,与其说是回归,其实更多的可以将其列为二元分类问题,因为sigmoid函数的特点,而且据说logistic回归在现实工作中还运用的比较多,可见并不是都是要高大上的东西才有运用空间,只要实用,也是不错的
最后说一说在Python里面有自带的sum函数,例如计算a=[1,2,3] sum(a)即为6,但是程序中使用到的是numpy里面的sum函数,numpy里面的sum函数还可以设置第二个参数,sum(a,axis),其中a就是array数组或者矩阵,axis=0表示按列求和,axis=1表示按行求和,这点需要注意。另外如果涉及到array或者矩阵的math运算,需要使用numpy里面的相对应的math函数,因此程序中是import numpy as np,然后使用np.log()等等,这点需要注意的
0 0
- MLA Review之四:logistic回归
- MLA Review之五:回归
- MLA Review之二: 决策树
- MLA Review之三:朴素贝叶斯分类
- Logistic回归---机器学习算法之四
- 机器学习笔记(四)之Logistic回归
- 数据挖掘回顾四:分类算法之 logistic回归 算法
- MLA Review之一: KNN算法
- 《机器学习实战》学习笔记(四)之Logistic(下)Logistic回归实战之预测病马死亡率及使用Sklearn构建Logistic回归分类器
- 分类数据之logistic回归
- 小白学Tensorflow之Logistic回归
- 机器学习之logistic回归
- 机器学习之Logistic回归
- 机器学习之Logistic回归
- 机器学习笔记(四)Logistic回归
- 应用机器学习(四):Logistic 回归
- Python机器学习(四):logistic回归
- 《Machine Learning in Action》 读书笔记之四:逻辑回归(logistic regression)
- [BZOJ4037][HAOI2015]Str
- java第二十节-字节流FileOutputStream-读
- c++ 指针
- Add Binary---67
- hdoj-1044 Collect More Jewels 这题对我来说有点难..
- MLA Review之四:logistic回归
- 新世界的开始
- PHP错误处理方式
- 穷举法解决换分币
- 计算机网络之面试笔试题总结
- iOS下获取用户当前语言
- Handler消息机制源码解析(三)
- bzoj3223 && Tyvj 1729 文艺平衡树
- NYOJ16(记忆化搜索)