《机器学习实战》笔记——逻辑回归

书上没有给具体的逻辑回归的课程,就直接上了代码,这很不好!

可以参考ng的课程,或者看这篇博文:http://blog.csdn.net/wlmnzf/article/details/72855610?utm_source=itdadao

过程还是比较浅显易懂的,就没怎么备注了。

  1 # _*_ coding:utf-8 _*_
  2
  3 from numpy import *
  4 def loadDataSet():
  5     dataMat = []
  6     labelMat = []
  7     fr = open(‘testSet.txt‘)
  8     for line in fr.readlines():
  9         lineArr = line.strip().split()
 10         dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])
 11         labelMat.append(int(lineArr[2]))
 12     return dataMat, labelMat
 13
 14 def sigmoid(inX):
 15     return 1.0/(1 + exp(-inX))
 16
 17 def gradAscent(dataMatIn, classLabels):
 18     dataMatrix =  mat(dataMatIn)
 19     labelMat = mat(classLabels).transpose()
 20     m,n = shape(dataMatrix)
 21     alpha = 0.001
 22     maxCycles = 500
 23     weights = ones((n,1))
 24     for k in range(maxCycles):
 25         h = sigmoid(dataMatrix*weights)
 26         error = (labelMat - h)  # 是数  这里没给出推导过程,推导过程上文有链接
 27         weights = weights + alpha * dataMatrix.transpose() * error
 28     return weights
 29
 30 # 5-3 随机梯度上升算法
 31 def stocGradAscent0(dataMatrix, classLabels):
 32     m,n = shape(dataMatrix)
 33     alpha = 0.01
 34     weights = ones(n)
 35     for i in range(m):
 36         h = sigmoid(sum(dataMatrix[i]*weights))
 37         error = classLabels[i] - h  # 是向量
 38         weights = weights + alpha * error * dataMatrix[i]
 39     return weights
 40
 41 # 5-4 改进的随机梯度上升算法
 42 def stocGradAscent1(dataMatrix, classLabels, numIter=150):
 43     m,n = shape(dataMatrix)
 44
 45     weights = ones(n)
 46     for j in range(numIter):
 47         dataIndex = range(m)
 48         for i in range(m):
 49             alpha = 4/(1.0+j+i) + 0.01
 50             randIndex = int(random.uniform(0, len(dataIndex)))
 51             h = sigmoid(sum(dataMatrix[randIndex]*weights))
 52             error = classLabels[randIndex] - h  # 是向量
 53             weights = weights + alpha * error * dataMatrix[randIndex]
 54             del(dataIndex[randIndex])
 55     return weights
 56
 57
 58 def plotBestFit(weights):
 59     import matplotlib.pyplot as plt
 60     # weights = wei.getA()    # 把matrix变为array
 61     dataMat, labelMat = loadDataSet()
 62     dataArr = array(dataMat)
 63     n = shape(dataArr)[0]
 64     xcord1 = []
 65     ycord1 = []
 66     xcord2 = []
 67     ycord2 = []
 68     for i in range(n):
 69         if int(labelMat[i])==1:
 70             xcord1.append(dataArr[i,1])
 71             ycord1.append(dataArr[i,2])
 72         else:
 73             xcord2.append(dataArr[i,1])
 74             ycord2.append(dataArr[i,2])
 75     fig = plt.figure()
 76     ax = fig.add_subplot(111)
 77     ax.scatter(xcord1, ycord1, c=‘red‘, s=30, marker=‘s‘)   # marker中s代表square
 78     ax.scatter(xcord2, ycord2, c=‘green‘, s=30)
 79     x = arange(-3, 3, 0.1)
 80     y = (-weights[0] - weights[1] * x) / weights[2]
 81     ax.plot(x, y)
 82     plt.xlabel(‘X1‘)
 83     plt.ylabel(‘X2‘)
 84     plt.show()
 85
 86 def classifyVector(inX, weights):
 87     prob = sigmoid(sum(inX * weights))
 88     if prob > 0.5: return 1.0
 89     else: return 0.0
 90
 91 def colicTest():
 92     frTrain = open(‘horseColicTraining.txt‘)
 93     frTest = open(‘horseColicTest.txt‘)
 94     trainingSet = []
 95     trainingLabels = []
 96     for line in frTrain.readlines():
 97         currLine = line.strip().split(‘\t‘)
 98         lineArr = []
 99         for i in range(21):
100             lineArr.append(float(currLine[i]))
101         trainingSet.append(lineArr)
102         trainingLabels.append(float(currLine[21]))
103     trainWeights = stocGradAscent1(array(trainingSet), trainingLabels, 500)
104     errorCount = 0
105     numTestVec = 0.0
106     for line in frTest.readlines():
107         numTestVec += 1.0
108         currLine = line.strip().split(‘\t‘)
109         lineArr = []
110         for i in range(21):
111             lineArr.append(float(currLine[i]))
112         if int(classifyVector(array(lineArr), trainWeights)) != int(currLine[21]):
113             int(currLine[21])
114             errorCount += 1
115         errorRate = (float(errorCount)/numTestVec)
116         print "the error rate of this test is: %f" % errorRate
117         return errorRate
118
119 def multiTest():
120     numTests = 10
121     errorSum = 0.0
122     for k in range(numTests):
123         errorSum += colicTest()
124     print "after %d iterations the average error rate is: %f" % (numTests, errorSum/float(numTests))
125
126 multiTest()
时间: 2025-01-02 03:47:53

《机器学习实战》笔记——逻辑回归的相关文章

机器学习实战笔记5(logistic回归)

1:简单概念描述 假设现在有一些数据点,我们用一条直线对这些点进行拟合(改线称为最佳拟合直线),这个拟合过程就称为回归.训练分类器就是为了寻找最佳拟合参数,使用的是最优化算法. 基于sigmoid函数分类:logistic回归想要的函数能够接受所有的输入然后预测出类别.这个函数就是sigmoid函数,它也像一个阶跃函数.其公式如下: 其中: z = w0x0+w1x1+-.+wnxn,w为参数, x为特征 为了实现logistic回归分类器,我们可以在每个特征上乘以一个回归系数,然后把所有的结果

机器学习实战笔记7(Adaboost)

1:简单概念描述 Adaboost是一种弱学习算法到强学习算法,这里的弱和强学习算法,指的当然都是分类器,首先我们需要简单介绍几个概念. 1:弱学习器:在二分情况下弱分类器的错误率会高于50%.其实任意的分类器都可以做为弱分类器,比如之前介绍的KNN.决策树.Na?ve Bayes.logiostic回归和SVM都可以.这里我们采用的弱分类器是单层决策树,它是一个单节点的决策树.它是adaboost中最流行的弱分类器,当然并非唯一可用的弱分类器.即从特征中选择一个特征来进行分类,该特征能是错误率

《机器学习实战》Logistic回归算法(1)

===================================================================== <机器学习实战>系列博客是博主阅读<机器学习实战>这本书的笔记也包含一些其他python实现的机器学习算法 算法实现均采用python github 源码同步:https://github.com/Thinkgamer/Machine-Learning-With-Python ==================================

机器学习实战笔记6(SVM)

鉴于July大哥的SVM三层境界(http://blog.csdn.net/v_july_v/article/details/7624837)已经写得非常好了,这里我就不详细描述,只是阐述简单的几个概念.如果看SVM三层境界有困惑,我也愿意与大家交流,共同进步. 简单概念描述: (1)      支持向量机(SVM, support vectormachine)就是通过最大化支持向量到分类超平面之间的分类间隔.分类超平面就是我们想要得到的决策曲面:支持向量就是离分类超平面最近的点,而间隔即为支持

机器学习实战笔记之非均衡分类问题

通常情况下,我们直接使用分类结果的错误率就可以做为该分类器的评判标准了,但是当在分类器训练时正例数目和反例数目不相等时,这种评价标准就会出现问题.这种现象也称为非均衡分类问题.此时有以下几个衡量标准. (1)   正确率<precise>和召回率<Recall> 如下图所示:其中准确率指预测的真实正例占所有真实正例的比例,等于TP/(TP+FP),而召回率指预测的真实正例占所有真实正例的比例,等于TP/(TP+FN).通常我们可以很容易的构照一个高正确率或高召回率的分类器,但是很难

机器学习实战笔记1(机器学习基础)

1:如何选择合适的算法 2:python简介 (1)   python的优势:相对于matlab,matlab单个软件授权就要花费数千美元,也没有一个有影响力的大型开源项目.相对于c++/c/java,完成简单的操作就需要编写大量的代码:而如今我们应该花费更多的时间去处理数据内在的含义,而无需花费太多精力解决计算机如何得到数据结果(python简洁) (2)   python具有numpy科学函数库,它是一个使运算更容易.执行更迅速的库:另外还有matplotlib绘图工具. 3:python语

机器学习总结之逻辑回归Logistic Regression

机器学习总结之逻辑回归Logistic Regression 逻辑回归logistic regression,虽然名字是回归,但是实际上它是处理分类问题的算法.简单的说回归问题和分类问题如下: 回归问题:预测一个连续的输出. 分类问题:离散输出,比如二分类问题输出0或1. 逻辑回归常用于垃圾邮件分类,天气预测.疾病判断和广告投放. 一.假设函数 因为是一个分类问题,所以我们希望有一个假设函数,使得: 而sigmoid 函数可以很好的满足这个性质: 故假设函数: 其实逻辑回归为什么要用sigmoi

遵循统一的机器学习框架理解逻辑回归

遵循统一的机器学习框架理解逻辑回归 标签: 机器学习 LR 分类 一.前言 我的博客不是科普性质的博客,仅记录我的观点和思考过程.欢迎大家指出我思考的盲点,更希望大家能有自己的理解. 本文参考了网络上诸多资料. 二.理解 统一的机器学习框架(MLA): 1.模型(Model) 2.策略(Loss) 3.算法(Algorithm) 按照如上所说框架,LR最核心的就是损失函数使用了 Sigmoid 和 Cross Entropy . LR: Sigmoid + Cross Entropy Model

[机器学习] Coursera ML笔记 - 逻辑回归(Logistic Regression)

引言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归.逻辑回归.Softmax回归.神经网络和SVM等等,主要学习资料来自Standford Andrew Ng老师在Coursera的教程以及UFLDL Tutorial,Stanford CS231n等在线课程和Tutorial,同时也参考了大量网上的相关资料(在后面列出). 前言 本文主要介绍逻辑回归的基础知识,文章小节安排如下: 1)逻辑回归定义 2)假设函数(Hypothesis function