python的numpy模块实现逻辑回归模型

使用python的numpy模块实现逻辑回归模型的代码,供大家参考,具体内容如下

使用了numpy模块,pandas模块,matplotlib模块

1.初始化参数

def initial_para(nums_feature):
    """initial the weights and bias which is zero"""
    #nums_feature是输入数据的属性数目,因此权重w是[1, nums_feature]维
    #且w和b均初始化为0
    w = np.zeros((1, nums_feature))
    b = 0
    return w, b

2.逻辑回归方程

def activation(x, w , b):
    """a linear function and then sigmoid activation function: 
    x_ = w*x +b,y = 1/(1+exp(-x_))"""
    #线性方程,输入的x是[batch, 2]维,输出是[1, batch]维,batch是模型优化迭代一次输入数据的数目
    #[1, 2] * [2, batch] = [1, batch], 所以是w * x.T(x的转置)
    #np.dot是矩阵乘法
    x_ = np.dot(w, x.T) + b
    #np.exp是实现e的x次幂
    sigmoid = 1 / (1 + np.exp(-x_))
    return sigmoid

3.梯度下降

def gradient_descent_batch(x, w, b, label, learning_rate):
    #获取输入数据的数目,即batch大小
    n = len(label)
    #进行逻辑回归预测
    sigmoid = activation(x, w, b)
    #损失函数,np.sum是将矩阵求和
    cost = -np.sum(label.T * np.log(sigmoid) + (1-label).T * np.log(1-sigmoid)) / n
    #求对w和b的偏导(即梯度值)
    g_w = np.dot(x.T, (sigmoid - label.T).T) / n
    g_b = np.sum((sigmoid - label.T)) / n
    #根据梯度更新参数
    w = w - learning_rate * g_w.T
    b = b - learning_rate * g_b
    return w, b, cost

4.模型优化

def optimal_model_batch(x, label, nums_feature, step=10000, batch_size=1):
    """train the model with batch"""
    length = len(x)
    w, b = initial_para(nums_feature)
    for i in range(step):
        #随机获取一个batch数目的数据
        num = randint(0, length - 1 - batch_size)
        x_batch = x[num:(num+batch_size), :]
        label_batch = label[num:num+batch_size]
        #进行一次梯度更新(优化)
        w, b, cost = gradient_descent_batch(x_batch, w, b, label_batch, 0.0001)
        #每1000次打印一下损失值
        if i%1000 == 0:
            print('step is : ', i, ', cost is: ', cost)
    return w, b

5.读取数据,数据预处理,训练模型,评估精度

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from random import randint
from sklearn.preprocessing import StandardScaler
 
def _main():
    #读取csv格式的数据data_path是数据的路径
    data = pd.read_csv('data_path')
    #获取样本属性和标签
    x = data.iloc[:, 2:4].values
    y = data.iloc[:, 4].values
    #将数据集分为测试集和训练集
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.2, random_state=0)
    #数据预处理,去均值化
    standardscaler = StandardScaler()
    x_train = standardscaler.fit_transform(x_train)
    x_test = standardscaler.transform(x_test)
    #w, b = optimal_model(x_train, y_train, 2, 50000)
    #训练模型
    w, b = optimal_model_batch(x_train, y_train, 2, 50000, 64)
    print('trian is over')
    #对测试集进行预测,并计算精度
    predict = activation(x_test, w, b).T
    n = 0
    for i, p in enumerate(predict):
        if p >=0.5:
            if y_test[i] == 1:
                n += 1
        else:
            if y_test[i] == 0:
                n += 1
    print('accuracy is : ', n / len(y_test))

6.结果可视化

predict = np.reshape(np.int32(predict), [len(predict)])
    #将预测结果以散点图的形式可视化
    for i, j in enumerate(np.unique(predict)):
        plt.scatter(x_test[predict == j, 0], x_test[predict == j, 1], 
        c = ListedColormap(('red', 'blue'))(i), label=j)
    plt.show()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python利用逻辑回归分类实现模板

    Logistic Regression Classifier逻辑回归主要思想就是用最大似然概率方法构建出方程,为最大化方程,利用牛顿梯度上升求解方程参数. 优点:计算代价不高,易于理解和实现. 缺点:容易欠拟合,分类精度可能不高. 使用数据类型:数值型和标称型数据. 好了,下面开始正文. 算法的思路我就不说了,我就提供一个万能模板,适用于任何纬度数据集. 虽然代码类似于梯度下降,但他是个分类算法 定义sigmoid函数 def sigmoid(x): return 1/(1+np.exp(-x)

  • python sklearn库实现简单逻辑回归的实例代码

    Sklearn简介 Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression).降维(Dimensionality Reduction).分类(Classfication).聚类(Clustering)等方法.当我们面临机器学习问题时,便可根据下图来选择相应的方法. Sklearn具有以下特点: 简单高效的数据挖掘和数据分析工具 让每个人能够在复杂环境中重复使用 建立NumPy.Scipy.MatPlotLib之上 代

  • python 实现逻辑回归

    逻辑回归 适用类型:解决二分类问题 逻辑回归的出现:线性回归可以预测连续值,但是不能解决分类问题,我们需要根据预测的结果判定其属于正类还是负类.所以逻辑回归就是将线性回归的结果,通过Sigmoid函数映射到(0,1)之间 线性回归的决策函数:数据与θ的乘法,数据的矩阵格式(样本数×列数),θ的矩阵格式(列数×1) 将其通过Sigmoid函数,获得逻辑回归的决策函数 使用Sigmoid函数的原因: 可以对(-∞, +∞)的结果,映射到(0, 1)之间作为概率 可以将1/2作为决策边界 数学特性好,

  • python代码实现逻辑回归logistic原理

    Logistic Regression Classifier逻辑回归主要思想就是用最大似然概率方法构建出方程,为最大化方程,利用牛顿梯度上升求解方程参数. 优点:计算代价不高,易于理解和实现. 缺点:容易欠拟合,分类精度可能不高. 使用数据类型:数值型和标称型数据. 介绍逻辑回归之前,我们先看一问题,有个黑箱,里面有白球和黑球,如何判断它们的比例. 我们从里面抓3个球,2个黑球,1个白球.这时候,有人就直接得出了黑球67%,白球占比33%.这个时候,其实这个人使用了最大似然概率的思想,通俗来讲,

  • python实现逻辑回归的方法示例

    本文实现的原理很简单,优化方法是用的梯度下降.后面有测试结果. 先来看看实现的示例代码: # coding=utf-8 from math import exp import matplotlib.pyplot as plt import numpy as np from sklearn.datasets.samples_generator import make_blobs def sigmoid(num): ''' :param num: 待计算的x :return: sigmoid之后的数

  • python编写Logistic逻辑回归

    用一条直线对数据进行拟合的过程称为回归.逻辑回归分类的思想是:根据现有数据对分类边界线建立回归公式. 公式表示为: 一.梯度上升法 每次迭代所有的数据都参与计算. for 循环次数:         训练 代码如下: import numpy as np import matplotlib.pyplot as plt def loadData(): labelVec = [] dataMat = [] with open('testSet.txt') as f: for line in f.re

  • python机器学习理论与实战(四)逻辑回归

    从这节算是开始进入"正规"的机器学习了吧,之所以"正规"因为它开始要建立价值函数(cost function),接着优化价值函数求出权重,然后测试验证.这整套的流程是机器学习必经环节.今天要学习的话题是逻辑回归,逻辑回归也是一种有监督学习方法(supervised machine learning).逻辑回归一般用来做预测,也可以用来做分类,预测是某个类别^.^!线性回归想比大家都不陌生了,y=kx+b,给定一堆数据点,拟合出k和b的值就行了,下次给定X时,就可以计

  • Python利用逻辑回归模型解决MNIST手写数字识别问题详解

    本文实例讲述了Python利用逻辑回归模型解决MNIST手写数字识别问题.分享给大家供大家参考,具体如下: 1.MNIST手写识别问题 MNIST手写数字识别问题:输入黑白的手写阿拉伯数字,通过机器学习判断输入的是几.可以通过TensorFLow下载MNIST手写数据集,通过import引入MNIST数据集并进行读取,会自动从网上下载所需文件. %matplotlib inline import tensorflow as tf import tensorflow.examples.tutori

  • Python实现的逻辑回归算法示例【附测试csv文件下载】

    本文实例讲述了Python实现的逻辑回归算法.分享给大家供大家参考,具体如下: 使用python实现逻辑回归 Using Python to Implement Logistic Regression Algorithm 菜鸟写的逻辑回归,记录一下学习过程 代码: #encoding:utf-8 """ Author: njulpy Version: 1.0 Data: 2018/04/10 Project: Using Python to Implement Logisti

  • python 牛顿法实现逻辑回归(Logistic Regression)

    本文采用的训练方法是牛顿法(Newton Method). 代码 import numpy as np class LogisticRegression(object): """ Logistic Regression Classifier training by Newton Method """ def __init__(self, error: float = 0.7, max_epoch: int = 100): ""

随机推荐