机器学习--Logistic回归算法案例

案例:从疝气病症预测病马的死亡率

准备数据时,数据中的缺失值是个非常棘手的问题。因为有时候数据相当昂贵,扔掉和重新获取都是不可取的,所以必须采用一些方法来解决这个问题。

在预处理阶段需要做两件事:第一,所有的缺失值必须用一个实数值来替换,因为我们使用的NumPy数据类型不允许包含缺失值。这里选择实数0来替换所有缺失值,恰好能适用于Logistic回归。第二,如果在测试数据集中发现了一条数据的类别标签已经缺失,那么我们可以将该条数据丢弃。因为类别标签与特征不同,很难确定采用某个合适的值来替换。

1、测试Logistic回归算法。把测试集上每个特征向量乘以最优化方法得来的回归系数,再将该乘积结果求和,最后输入到Sigmoid函数中。如果对应的Sigmoid值大于0.5就预测类别标签1,否则为0。

########################################

#功能:类别标签分类

#输入变量:inx, weights 特征向量,回归系数

########################################

def classify_vector(inx, weights):

prob = sigmoid(sum(inx * weights))

if prob > 0.5:

return 1.0

else:

return 0.0

2、打开训练集和测试集,并对数据进行格式化处理。数据的最后一列是类别标签,分为“仍存活”和“未能存活”两类。这里选用改进的随机梯度上升算法来计算回归系数向量。

########################################

# 功能:病马死亡率的测试

# 输入变量:空

# 输出变量:错误率

########################################

def colic_test():

fr_train = open(‘horseColicTraining.txt‘)

fr_test = open(‘horseColicTest.txt‘)

training_set = []

training_labels = []

for line in fr_train.readlines():

curr_line = line.strip().split(‘\t‘)

line_arr = []

for i in xrange(21):

line_arr.append(float(curr_line[i]))

training_set.append(line_arr)

training_labels.append(float(curr_line[21]))

train_weights = rand_grad_ascent1(array(training_set), training_labels, 500)

error_count = 0

num_test_vec = 0.0

for line in fr_test.readlines():

num_test_vec += 1.0

curr_line = line.strip().split(‘\t‘)

line_arr = []

for i in xrange(21):

line_arr.append(float(curr_line[i]))

if int(classify_vector(array(line_arr), train_weights)) != int(curr_line[21]):

error_count += 1

error_rate = float(error_count)/num_test_vec

print ‘the error rate of this test is: %f‘ % error_rate

return error_rate

########################################

# 功能:求迭代10次后的平均错误率

########################################

def multi_test():

num_tests = 10

error_sum = 0.0

for k in xrange(num_tests):

error_sum += colic_test()

print ‘after %d iterations the average error rate is: %f‘ % (num_tests, error_sum/float(num_tests))

测试代码:

def main():

multi_test()

if __name__ == ‘__main__‘:

main()

时间: 2024-11-05 12:48:15

机器学习--Logistic回归算法案例的相关文章

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

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

机器学习算法-logistic回归算法

Logistic回归算法调试 一.算法原理 Logistic回归算法是一种优化算法,主要用用于只有两种标签的分类问题.其原理为对一些数据点用一条直线去拟合,对数据集进行划分.从广义上来讲这也是一种多元线性回归方法,所不同的是这种算法需要找出的是能够最大可能地将两个类别划分开来而不是根据直线关系预测因变量的值.Logistic回归算法的核心部分是sigmoid函数: 其中,xi为数据集的第i个特征.定义损失函数损失函数: 损失函数越小表明曲线拟合的效果就越好.利用梯度向上法更新x的系数W,求出W的

机器学习&mdash;&mdash;Logistic回归

参考<机器学习实战> 利用Logistic回归进行分类的主要思想: 根据现有数据对分类边界线建立回归公式,以此进行分类. 分类借助的Sigmoid函数: Sigmoid函数图: Sigmoid函数的作用: 将所有特征都乘上一个回归系数,然后将所有结果值相加,将这个总和代入Sigmoid函数中,进而得到一个0-1之间的数值.任何大于0.5的数据被分1类,小于0.5分入0类. 综上,Sigmoid的输入可以记为z: 所以向量w即是我们要通过最优化方法找的系数. w向量的求解: 1).梯度上升法(思

机器学习-logistic回归

logistic回归的主要思想: 已知样本数目为m,特征(feature)数目为n. 给出假设h(X)=g(X*theta) g(z)是sigmiod函数:g(z)=1/(1+exp(-z)) 考虑分类器问题:Y取值为0或1,同样地,h(X)取值为0或1. 则P(y|x;theta)=h(x)^y*(1-h(x))^(1-y) 对其取log得到: 对J求导得到: 利用最大似然函数求解,得到theta和J 注:基于MATLAB,通过设置options=optimset('GradObj','on'

机器学习逻辑回归算法推导

1.引自https://www.cnblogs.com/bnuvincent/p/9695666.html 2. 基本原理 Logistic Regression和Linear Regression的原理是相似的,按照我自己的理解,可以简单的描述为这样的过程: (1)找一个合适的预测函数(Andrew Ng的公开课中称为hypothesis),一般表示为h函数,该函数就是我们需要找的分类函数,它用来预测输入数据的判断结果.这个过程时非常关键的,需要对数据有一定的了解或分析,知道或者猜测预测函数的

logistic回归算法的损失函数:binary_crossentropy(二元交叉熵)

假设函数: 更为一般的表达式:        (1) 似然函数:              (2) 对数似然函数: 如果以上式作为目标函数,就需要最大化对数似然函数,我们这里选择最小化负的对数似然函数           (3) 对J(w)求极小值,对求导                 (4) 上述中 表示第i个样本的第j个属性的取值. 于是的更新方式为:                         (5) 将(5)式带入(4)式,得: 梯度下降GD的更新方式,使用全部样本:  (6) 当

监督学习的Logistic回归算法

函数原型 \[h_\theta(X)=\frac{1}{1+e^{-\theta^TX}}...称h_\theta(X)为y=1的概率.\] 决策界限的定义 \(根据函数表达式可知当z>=0时y>=0.5当z<0时y<0.5...z=\theta^TX,y=h_\theta(X)\) \(故直线z=\theta^TX为决策界限\) ## 代价函数 线性回归的代价函数为: \[J(\theta)=2\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^i)-y(x

机器学习经典算法详解及Python实现---Logistic回归(LR)分类器

(一)认识Logistic回归(LR)分类器 首先,Logistic回归虽然名字里带"回归",但是它实际上是一种分类方法,主要用于两分类问题,利用Logistic函数(或称为Sigmoid函数),自变量取值范围为(-INF, INF),自变量的取值范围为(0,1),函数形式为: 由于sigmoid函数的定义域是(-INF, +INF),而值域为(0, 1).因此最基本的LR分类器适合于对两分类(类0,类1)目标进行分类.Sigmoid 函数是个很漂亮的"S"形,如下

【机器学习算法实现】logistic回归__基于Python和Numpy函数库

[机器学习算法实现]系列文章将记录个人阅读机器学习论文.书籍过程中所碰到的算法,每篇文章描述一个具体的算法.算法的编程实现.算法的具体应用实例.争取每个算法都用多种语言编程实现.所有代码共享至github:https://github.com/wepe/MachineLearning-Demo     欢迎交流指正! (2)logistic回归__基于Python和Numpy函数库 1.算法简介 本文的重点放在算法的工程实现上,关于算法的原理不具体展开,logistic回归算法很简单,可以看看A