MachineLearning:四、逻辑回归in python

前面讲了logistic的理论部分,这里我参照《机器学习实战》写了logistic的实现部分。如果对logistic不清楚,请看逻辑回归。 我建立了一个逻辑回归的类,类中包含三个主要函数:

  • fit:拟合模型.
  • predict:进行预测
  • score:求错误率

数据我使用预测患有疝病的马的存活问题。这里面的数据包含368个样本和28个特征。下面是详细代码,我的github上面有数据和代码:logistic regression
下面是具体代码,如果知道logistic原理,下面的代码并不难理解

# -*- coding: utf-8 -*-
"""python
Created on Fri Apr  8 23:59:45 2016

@author: wq

逻辑回归
"""
from numpy import  *


class LogisticRegression():
    '''
    二项逻辑回归模型

    参数
    --------

    '''
    def __init__(self, alpha=1):
        '''
        初始化
        参数
        ---------
        alpha,梯度下降迭代步长
        '''
        self.alpha = alpha
        self.weights = []     #模型权值

    def sigmoid(self, inX):
        #print inX
        return 1/(1+sum(exp(-inX)))

    def fit(self, dataMatrix, classLabels):
        '''根据训练数据拟合模型

        参数
        ------------
        dataMatrix:
            训练样本属性矩阵
            类型:array
        classLabels:
            训练样本标签
            类型:list

        '''
        row,col = dataMatrix.shape
        if len(self.weights) == 0:
            weights = ones(col)   #初始化权值矩阵2
        else:
            weights = self.weights
        diff = weights      #权值变化矩阵,初始化为权值矩阵
        j = 0 #迭代次数
        while(abs(max(diff))>0.001):     #当权值变化很小的时停止迭代。
            dataIndex = range(row)
            for i in range(row):
                alpha = 4/(self.alpha+i)+0.0001    #alpha随着每次迭代,下降。参数趋于稳定
                randIndex = int(random.uniform(0,len(dataIndex)))#随机选取训练对象
                h = self.sigmoid(sum(dataMatrix[randIndex]*weights))#sigmoid求值
                error = classLabels[randIndex] - h      #误差项

                diff = weights      
                weights = weights + alpha * error * dataMatrix[randIndex]#权值更新
                diff = weights - diff                #权值差异
                del(dataIndex[randIndex])
        self.weights = weights
        #print weights

    def predict(self,dataList):
        '''
        训练的二项逻辑回归预测

        参数
        --------
        dataList:
            待预测样本属性,
            类型:list
        '''
        if len(self.weights) == 0:
            raise KeyError,("没有进行模型训练")#如果没有进行fit预测,抛出异常
        prob = self.sigmoid(sum(dataList*self.weights))#概率
        if prob > 0.5:return 1
        else: return 0

    def score(self,dataMatrix, classLabels):
        '''
        评价模型性能


        参数
        ------------
        dataMatrix:
            测试样本属性举证
            属性:array
        classLabels:
            测试样本类别,这里只有1、0两类
            属性:list

        return
        ---------
        errorRate:错误率
        '''
        numData = len(dataMatrix)
        errorCount = 0
        j = 0 #行数记录,
        for line in dataMatrix:
            #print '预测结果',self.predict(line)
            #print '样本标签',classLabels[j]
            if int(self.predict(line)) != int(classLabels[j]):
                errorCount += 1
            j += 1
        #print errorCount
        errorRate = (float(errorCount)/numData)
        print "the error rate of this test is: %f" % errorRate
        return errorRate

if __name__=='__main__':
    frTrain = open('horseColicTraining.txt')#读取数据
    frTest = open('horseColicTest.txt')

    #读取训练集
    trainingSet = []; trainingLabels = []
    for line in frTrain.readlines():
        line = line.strip().split('\t')
        trainingSet.append(map(float, line)[:-1])
        trainingLabels.append(float(line[21]))

    #读取测试集
    testSet = [];testLabels = []
    for line in frTest:
        line = line.strip().split('\t')
        testSet.append(map(float, line)[:-1])
        testLabels.append(line[21])

    #实例化
    clf = LogisticRegression(1.0)
    #迭代10次
    for i in range(10):
        clf.fit(array(trainingSet), trainingLabels)
        clf.score(array(testSet), testLabels)

参考资料

《机器学习实战》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python 是一种高级编程语言,被广泛用于机器学习机器学习是一种人工智能的分支,通过让计算机从数据中学习和改进,来预测结果和做出决策。Python 提供了丰富的库和工具来支持机器学习任务。 Python机器学习的首选语言之一,因为它具有以下优势: 1. 简洁易读:Python 的语法简单易读,非常适合初学者。这使得开发过程更加高效,并有助于深入理解机器学习算法的实现。 2. 丰富的库和工具:Python 生态系统中有许多用于机器学习的强大库,如 TensorFlow、Scikit-learn 和 PyTorch。这些库提供了丰富的功能和工具,可用于数据处理、特征选择、模型训练和评估等任务。 3. 广泛应用:Python 在数据科学和机器学习社区中非常流行,许多研究人员和开发者使用 Python 来构建和部署机器学习模型。这使得在社区中分享、交流和复用代码更加容易。 4. 强大的可视化能力:Python 的可视化库如 Matplotlib 和 Seaborn,可以帮助开发者更好地理解和可视化数据。这对于可视化模型的性能评估和结果解释非常有帮助。 5. 兼容性和扩展性:Python 可以与其他语言(如 C/C++、Java 和 R)进行混合编程,这使得在需要优化性能时能够轻松集成其它语言的库。此外,Python 也适用于开发 Web 应用和部署模型。 总之,Python机器学习中一种强大、易用且广泛应用的编程语言,它的丰富库和工具,以及庞大的社区支持,使其成为实施机器学习算法和构建模型的首选工具之一。 ### 回答2: Python 是一种流行的编程语言,而机器学习Machine Learning)是一种应用该语言进行模型训练和预测的技术。 机器学习是人工智能(Artificial Intelligence)领域的一个重要分支,通过使用统计学和数学方法,让计算机从大量数据中学习模式,并基于学习的经验做出预测和决策。Python 是一种灵活且易于学习的编程语言,在机器学习领域得到广泛应用。 Python机器学习库和框架种类繁多,其中最流行的包括:TensorFlow、PyTorch、Scikit-learn 等。这些库提供了大量的算法和工具,能够帮助我们构建和训练各种不同类型的机器学习模型,如决策树、逻辑回归、支持向量机等。 Python 的设计理念之一是简洁易读,这使得编写机器学习代码变得更加轻松和可读性更强。此外,Python 拥有强大的数据处理和可视化能力,能够帮助我们更好地理解数据和模型的性能。 在机器学习任务中,Python机器学习库常常与其他数据处理和分析库搭配使用,如 NumPy、Pandas、Matplotlib 等。这些库能够提供高效的数学计算、数据处理和图形绘制功能,使我们能够更好地分析和处理数据。 总之,Python 是一种理想的机器学习开发语言,它的简洁易读和丰富的第三方库使得机器学习的开发变得更加高效和便捷。如果你对机器学习充满兴趣,掌握 Python 语言和相关的机器学习库将是你的不错选择。 ### 回答3: Python机器学习机器是一种使用Python编程语言开发的机器学习应用程序。Python是一种高级编程语言,以其简洁、易于使用和广泛的库支持而闻名。机器学习是一种人工智能领域的子领域,通过使用算法和统计模型,使计算机可以从数据中学习并自动改进性能。 Python机器学习机器和其他机器学习机器一样,通过利用Python库中丰富的功能,实现从数据中学习并创建模型的过程。Python机器学习库最受欢迎的是scikit-learn,它提供了许多常用的机器学习算法和工具,包括分类、回归、聚类和降维。此外,Python还有其他一些流行的机器学习库,如TensorFlow和PyTorch,它们专注于深度学习领域。 使用Python机器学习机器,可以处理各种学习任务,例如分类、回归、聚类和预测。通过使用Python机器学习库,可以对数据进行特征选择、数据预处理和模型评估等操作。此外,一些高级任务,如图像识别、自然语言处理和推荐系统等,也可以通过Python机器学习机器来完成。 Python机器学习机器的好处之一是其大量的社区支持和资源。Python社区提供了许多教程、示例代码和文档,使学习和使用机器学习更加容易。此外,Python机器学习机器还可以与其他Python库和工具集成,如数据处理库Pandas和可视化库Matplotlib,进一步提高数据分析和模型可视化的能力。 总而言之,Python机器学习机器是使用Python编程语言进行机器学习的应用程序。它利用Python的丰富库和社区资源,可以处理各种机器学习任务,并与其他Python库集成,提供更多的功能和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值