逻辑回归,也叫对数几率回归:










import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets._samples_generator import make_classificationclass logistic_regression():def __init__(self):pass# 先定义一个sigmoid函数def sigmoid(self,x):z = 1 / (1 + np.exp(-x))return z# 定义模型参数初始化函数def initialize_param(self,dims):w = np.zeros((dims, 1))b = 0return w, b# 定义逻辑回归模型主体部分,包括模型计算公式,损失函数和参数的梯度公式def logistic(self,x, y, w, b):num_train = x.shape[0]num_feature = x.shape[1]a = self.sigmoid(np.dot(x, w) + b)#预测值#损失函数cost = -1 / num_train * np.sum(y * np.log(a) + (1 - y) * np.log(1 - a))#可基于上式分别关于 W 和b 求其偏导可得:dw = np.dot(x.T, (a - y)) / num_traindb = np.sum(a - y) / num_traincost = np.squeeze(cost)return a, cost, dw, db#定义基于梯度下降的参数更新训练过程def logistic_train(self,x, y, learning_rate, epochs):# 初始化模型参数w, b = self.initialize_param(x.shape[1])cost_list = []# 迭代训练for i in range(epochs):# 计算当前迭代模型的计算结果,损失和参数梯度a, cost, dw, db = self.logistic(x, y, w, b)# 参数更新w = w - learning_rate * dwb = b - learning_rate * db# 记录损失,打印训练过程中的损失if i % 100 == 0:cost_list.append(cost)print('epoch %d cost %f' % (i, cost))# 保存参数params = {'w': w,'b': b}# 保存梯度grads = {'dw': dw,'db': db}return cost_list, params, gradsdef predict(self,x, params):y_prediction = self.sigmoid(np.dot(x, params['w']) + params['b'])for i in range(len(y_prediction)):if y_prediction[i] > 0.5:#预测结果大于0.5,则分为1类y_prediction[i] = 1else:y_prediction[i] = 0#预测结果小于0.5,则分为0类return y_prediction#    定义一个分类准确率函数对训练集和测试集的准确率进行评估:def accuracy(self,y_test, y_pred):correct_count = 0for i in range(len(y_test)):for j in range(len(y_pred)):if y_test[i] == y_pred[j] and i == j:#预测值和标签值相同,则预测正确correct_count += 1accuracy_score = correct_count / len(y_test)return accuracy_score#创建数据# 使用sklearn生成模拟二分类数据集进行模型训练和测试:def create_data(self):x, labels = make_classification(n_samples=100, n_features=2, n_redundant=0, n_informative=2, random_state=1,n_clusters_per_class=2)#labels=labels.reshape((-1,1))#画出数据分布图rng = np.random.RandomState(2)x += 2 * rng.uniform(size=x.shape)unique_label = set(labels)colors = plt.cm.Spectral(np.linspace(0, 1, len(unique_label)))for k, col in zip(unique_label, colors):x_k = x[labels == k]plt.plot(x_k[:, 0], x_k[:, 1], 'o', markerfacecolor=col, markeredgecolor='k', markersize=14)plt.title('data by make classfication()')# 对数据进行简单的训练集和测试集的划分offset = int(x.shape[0] * 0.9)x_train, y_train = x[:offset], labels[:offset]x_test, y_test = x[offset:], labels[offset:]y_train = y_train.reshape((-1, 1))y_test = y_test.reshape((-1, 1))print("x_train=", x_train.shape)print("x_test=", x_test.shape)print("y_train=", y_train.shape)print("y_test=", y_test.shape)return x_train, y_train, x_test, y_test# 最后我们定义个绘制模型决策边界的图形函数对训练结果进行可视化展示:def plot_logistic(self,x_train, y_train, params):n = x_train.shape[0]xcord1 = []ycord1 = []xcord2 = []ycord2 = []for i in range(n):if y_train[i] == 1:xcord1.append(x_train[i][0])ycord1.append(x_train[i][1])else:xcord2.append(x_train[i][0])ycord2.append(x_train[i][1])fig = plt.figure(2)ax = fig.add_subplot(111)ax.scatter(xcord1, ycord1, s=32, c='red')ax.scatter(xcord2, ycord2, s=32, c='green')x = np.arange(-1.5, 3, 0.1)y = (-params['b'] - params['w'][0] * x) / params['w'][1]#分界面ax.plot(x, y)plt.xlabel('x1')plt.ylabel('x2')plt.show()if __name__=='__main__':model=logistic_regression()x_train,y_train,x_test,y_test=model.create_data()# 对训练集进行训练cost_list, params, grads = model.logistic_train(x_train, y_train, 0.01, 1000)print(params)#测试集数据进行测试y_prediction = model.predict(x_test, params)print(y_prediction)# 打印训练准确率y_train_pred = model.predict(x_train, params)accuracy_score_train = model.accuracy(y_train, y_train_pred)print('train accuracy is:',accuracy_score_train)# 打印测试准确率y_test_pred = model.predict(x_test, params)accuracy_score_test = model.accuracy(y_test, y_test_pred)print('test accuracy is:',accuracy_score_test)model.plot_logistic(x_train, y_train, params)


逻辑回归(对数几率回归)推导及python代码实现相关推荐

  1. 逻辑斯蒂回归(对数几率回归)

    首先,对数几率回归和线性回归的一点直观上的理解: 线性回归目的是找到一条直线(或者超平面)尽可能地接近所有的训练数据点,而对数几率回归(二元)的目的是找到一条直线(或者超平面)尽可能地分开两种不同类别 ...

  2. 个人总结:从 线性回归 到 逻辑回归 为什么逻辑回归又叫对数几率回归?

    逻辑回归不是回归算法,是分类算法,可以处理二元分类以及多元分类. 线性回归 线性回归的模型是求出特征向量Y和输入样本矩阵X之间的线性关系系数θ,满足Y = Xθ.此时Y是连续的,所以是回归模型. 对应 ...

  3. 机器学习 对数几率回归模型(Python实现)

    本文介绍对数几率回归模型,是一个典型的二分类任务学习模型 书接上回,我们可以对一个数据集得到它的回归方程 我们是这样去解读回归方程的:在相关属性下对样例的某一特征的度量 我们根据回归方程得到的特征度量 ...

  4. 机器学习入门学习笔记:(2.3)对数几率回归推导

    理论推导   在以前的博客(机器学习入门学习笔记:(2.1)线性回归理论推导 )中推导了单元线性回归和多元线性回归的模型.   将线性回归模型简写为:y=ωTx+by = \omega^Tx+b:   ...

  5. 机器学习之逻辑回归(对数几率回归)

    机器学习算法之逻辑回归(对数几率回归)- 做分类的 一.概述: 逻辑(logistic)回归, 又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域 ...

  6. 机器学习-对数几率回归(逻辑回归)算法

    文章目录 简介 激活函数 损失函数 优化算法 代码 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站. 简介 对数几率回归(Logistic Regre ...

  7. 对数几率回归-逻辑回归

    算法原理 上一节内容讨论了如何使用线性模型进行回归模型,但要做回归任务要如何呢? 只要找一个单调可微的函数将分类任务的真实标记y与线性回归模型的预测值联系起来 在线性模型的基础上套一个映射函数来实现分 ...

  8. sklearn:线性回归和逻辑回归(对数几率回归)

    线性回归与逻辑回归 1. 线性回归(LinearRegression) 1.1 理论 1.2 重要参数 1.3 实践 2. 对数几率回归(LogisticRegression,也被称为逻辑回归) 2. ...

  9. 机器学习教程 之 线性模型:线性回归、对数几率回归、线性判别分析

    常用的三个线性模型的原理及python实现--线性回归(Linear Regression).对数几率回归(Logostic Regression).线性判别分析(Linear Discriminan ...

最新文章

  1. 编译是检查C语言什么的错误,c语言编译过程
  2. 程序员/设计师能用上的 75 份速查表(转)
  3. leetcode算法题--K站中转内最便宜的航班★
  4. JavaEE笔记(五)
  5. Geany 权限问题:Error opening file ... : permission denied.,原因及解决办法。
  6. ABAP ALV里日期类型的F4帮助
  7. ABAP SAP 程序放在哪个库表中
  8. mybatis针对mysql自增主键怎样配置mapper
  9. 国外计算机科学英语演讲,2014年暨大英语演讲大赛圆满落幕
  10. Docker的容器运行时组件Containerd
  11. java for循环遍历解释,三种for循环遍历
  12. snapshot---caffemodel和solverstate
  13. 全局路径规划:图搜索算法介绍1(BFS/DFS)
  14. 【java】java ssh 远程执行命令 并且获取执行的结果
  15. python 笔记 之 练习答案-ABCD乘以9=DCBA
  16. Java【第六篇】面向对象基础
  17. protobuffer中string和bytes类型
  18. send tcp char far_wemos D1 arduino项目实战1-TCP协议连接Tlink平台③
  19. 关于安装QCAT/QXDM异常的问题
  20. 腾讯电脑管家具有计算机病毒查杀功能,腾讯电脑管家算杀毒软件吗_腾讯电脑管家不仅仅是杀毒软件-高达阁杀毒软件站...

热门文章

  1. 搜狗浏览器论坛下线通告:10月18日停止服务
  2. 关于spark的sample()算子参数详解
  3. What‘s Wrong with Copying?
  4. PbootCMS开发助手_pbootcms仿站工具_标签生成器下载
  5. (13)香橙派+apache2与php+天猫精灵=自建平台语音支持--duerOS对接
  6. 什么是SRE,如何从 0 建设 SRE 运维体系?
  7. Linux: kill, pkill, killall命令的区别
  8. Linux下 Jenkins启动
  9. 【前端】psd到html切图,包含ps切图
  10. 水文数据库表结构及标识符---SL/T 324-2019