数据集:
在txt文本里面,自己编写三列数行数据就可以,参考下图(由于无法上传,数据无所谓,可以自己编写,主要是实现算法):
右图是程序运行添加的头部和侧面编号,文本框只有数据,见下左图

简单算法手写草拟:

python实现:
1、导入python库

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']#显示中文

2、导入数据并标记

path = 'andrew_ml_ex22391逻辑回归数据集\ex2data1.txt'
data = pd.read_csv(path,header=None,names=['体检1','体检2','患病'])阳性 = data[data['患病'].isin([1])]
阴性 = data[data['患病'].isin([0])]

3、数据可视化

fig, ax = plt.subplots(figsize=(12,8))
ax.scatter(阳性['体检1'], 阳性['体检2'], s=50, c='r', marker='o', label='患病')
ax.scatter(阴性['体检1'], 阴性['体检2'], s=50, c='g', marker='s', label='不患病')
ax.legend()
ax.set_xlabel('体检 1 数据')
ax.set_ylabel('体检 2 数据')
plt.show()

结果显示:

4、①Sigmoid函数和 应用梯度下降更新Ѳ
Sigmoid函数:

偏导数:

python代码如下:

# 实现sigmoid函数
def sigmoid(z):return 1/(1+np.exp(-z))
#实现代价函数
def Cost(theta,X,y):first = np.multiply(-y,np.log(sigmoid(X*theta.T)))second = np.multiply((1-y),np.log(1-sigmoid(X*theta.T)))return np.sum(first-second)/(len(X))
#t梯度下降
def gradientDescent(X, y, theta, alpha, iters):temp = np.matrix(np.zeros(theta.shape))parameters = int(theta.ravel().shape[1])cost = np.zeros(iters)for i in range(iters):error = sigmoid(X * theta.T) - yfor j in range(parameters):term = np.multiply(error, X[:, j])temp[0, j] = theta[0, j] - ((alpha / len(X)) * np.sum(term))theta = tempcost[i] = Cost(theta,X,y)return theta, cost# 加一列常数列
data.insert(0, 'Ones', 1)# 初始化X,y,θ
cols = data.shape[1]
X = data.iloc[:,0:cols-1]
y = data.iloc[:,cols-1:cols]X = np.matrix(X.values)
y = np.matrix(y.values)
theta = np.matrix(np.array([0,0,0]))alpha = 0.0001#如果学习率太大会造成梯度上升,得出NAN数值,详见后期专门分析学习率
iters = 1500
g,cost= gradientDescent(X, y, theta, alpha, iters)
print(g,cost)

运行结果:(最后代价函数为0.62909,有点大)

②利用scipy.optimize.fmin_tnc工具库,不用自己定义,自动应用学习率和迭代最优解
python代码如下:

#实现代价函数
def Cost(theta,X,y):theta = np.matrix(theta)X = np.matrix(X)y = np.matrix(y)first = np.multiply(-y, np.log(sigmoid(X * theta.T)))second = np.multiply((1 - y), np.log(1 - sigmoid(X * theta.T)))return np.sum(first - second) / (len(X))# 加一列常数列
data.insert(0, 'Ones', 1)# 初始化X,y,θ
cols = data.shape[1]
X = data.iloc[:,0:cols-1]
y = data.iloc[:,cols-1:cols]X = np.array(X.values)
y = np.array(y.values)
theta = np.zeros(3)
#实现梯度函数
def gradient(theta, X, y):theta = np.matrix(theta)X = np.matrix(X)y = np.matrix(y)parameters = int(theta.ravel().shape[1])grad = np.zeros(parameters)error = sigmoid(X * theta.T) - yfor i in range(parameters):term = np.multiply(error, X[:, i])grad[i] = np.sum(term) / len(X)return gradimport scipy.optimize as opt
result = opt.fmin_tnc(func=Cost, x0=theta, fprime=gradient,args=(X,y))# 用θ的计算结果代回代价函数计算
print(result[0])
print(Cost( result[0],X, y))

运行结果:

对比得知第②种方法最优
如果想用第①种方法,就要设置个循环,假设代价函数(数据集全部损失函数的平均)小于0.3停止迭代(运行时间可能特别慢)
python代码如下:

alpha = 0.0005#如果学习率太大会造成梯度上升,得出NAN数值,详见后期专门分析学习率
iters = 15000while True:g, cost = gradientDescent(X, y, theta, alpha, iters)if cost[-1] <0.3:print(g,cost)breakelse:print(cost)iters =iters+15000

迭代结果输出如下:

5、画出决策线
python代码如下:

print(result[0])
print(Cost( result[0],X, y))plotting_x1 = np.linspace(30, 100, 100)
plotting_h1 = ( - result[0][0] - result[0][1] * plotting_x1) / result[0][2]fig, ax = plt.subplots(figsize=(12,8))
ax.plot(plotting_x1, plotting_h1, 'y', label='预测 ')ax.scatter(阳性['体检1'], 阳性['体检2'], s=50, c='r', marker='o', label='患病')
ax.scatter(阴性['体检1'], 阴性['体检2'], s=50, c='g', marker='s', label='不患病')ax.legend()
ax.set_xlabel('体检 1 数据')
ax.set_ylabel('体检 2 数据')
plt.show()

运行结果:
①、梯度下降配合循环逻辑,得出的Ѳ画出的图:

②、利用scipy.optimize.fmin_tnc工具库得出的Ѳ画出的图:

6、预测得病率和得不得病的反馈
得病为1,不得病为0
体检1为60,体检2为70
python代码如下:

def hfunc1(theta, X):return sigmoid(np.dot(theta.T, X))def predict(theta, X):probability = sigmoid(np.dot(theta.T, X))return [1 if probability >= 0.5 else 0]print('得病率为:',hfunc1(result[0],[1,60,70]))
print('预测得不得病:',predict(result[0],[1,60,70]))

运行结果:

如有问题欢迎指正,谢谢~

机器学习(二)简单逻辑回归python算法+代码(实例:体检阳性阴性预测患不患病)相关推荐

  1. 机器学习的简单逻辑回归的Advanced Optimization

    Learning Course: One variable logistic regression optimization 单变量(只有一个特征)的用于分类的逻辑回归的cost function的最 ...

  2. java基础巩固-宇宙第一AiYWM:为了维持生计,编程语言番外篇之机器学习(项目预测模块总结:线性回归算法、逻辑回归分类算法)~整起

    机器学习 一.机器学习常见算法(未完待续...) 1.算法一:线性回归算法:找一条完美的直线,完美拟合所有的点,使得直线与点的误差最小 2.算法二:逻辑回归分类算法 3.算法三:贝叶斯分类算法 4.算 ...

  3. 人工智能算法通俗讲解系列(二):逻辑回归

    2019独角兽企业重金招聘Python工程师标准>>> 今天,我们介绍的机器学习算法叫逻辑回归.它英语名称是Logistic Regression,简称LR. 跟之前一样,介绍这个算 ...

  4. python对逻辑回归进行显著性_python sklearn库实现简单逻辑回归的实例代码

    Sklearn简介 Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression).降维(Dimensionality Red ...

  5. 【机器学习算法笔记系列】逻辑回归(LR)算法详解和实战

    逻辑回归(LR)算法概述 逻辑回归(Logistic Regression)是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理多分类问题,它实际上是属于一种分类方法. 逻辑 ...

  6. 《人工智能》机器学习 - 第5章 逻辑回归(二 二元逻辑回归实战)

    5.2二元逻辑回归实战 5.2.1二元逻辑回归简单实例 首先看看数据吧. 随机的一些数据,这是一个二分问题的数据.先导入数据.Python代码如下. """ 函数说明:读 ...

  7. 【机器学习】 逻辑回归原理及代码

    大家好,我是机器侠~ 1 Linear Regression(线性回归) 在了解逻辑回归之前,我们先简单介绍一下Linear Regression(线性回归). 线性回归是利用连续性的变量来预估实际数 ...

  8. Interview:算法岗位面试—10.12上午—上海某科技公司图像算法岗位(偏图像算法,互联网AI行业)技术面试考点之LoR逻辑回归的底层代码实现、特征图计算公式

    ML岗位面试:10.12上午-上海某科技公司图像算法岗位(偏图像算法,互联网AI行业)技术面试考点之LoR逻辑回归的底层代码实现.特征图计算公式 Interview:算法岗位面试-10.12上午-上海 ...

  9. 逻辑回归python sigmoid(z)_python实现吴恩达机器学习练习2(逻辑回归)-data1

    python实现吴恩达机器学习练习2(逻辑回归)-data1 这篇是第一个数据集:这部分练习中,你将建立一个预测学生是否被大学录取的逻辑回归模型. 假如一所大学会每个报名学生进行两项入学考试,根据两项 ...

  10. python逻辑回归训练预测_[Python] 机器学习笔记 基于逻辑回归的分类预测

    导学问题 什么是逻辑回归(一),逻辑回归的推导(二 3),损失函数的推导(二 4) 逻辑回归与SVM的异同 逻辑回归和SVM都用来做分类,都是基于回归的概念 SVM的处理方法是只考虑 support ...

最新文章

  1. a标签用ajax请求传参,Django中如何实现传参的Ajax请求
  2. VTK:图片之ImageTransparency
  3. 华为鸿蒙编程:如何显示网络图片
  4. P4449 于神之怒加强版
  5. 深度操作系统 Deepin 20 BETA 发布
  6. convolutional pose machines
  7. ubuntu18.04彻底卸载mysql5.7,图文详解
  8. python学习记录 - python3.x中如何实现print不换行
  9. c语言知识点总结大全(史上最全)
  10. 计算机视觉中的图像扭曲
  11. “私域”和“会员制”有什么区别?
  12. 【电源模块】LM2596 DCDC降压模块设计
  13. origin做主成分分析图_Origin如何进行主成分分析
  14. XShell配置跳板机访问最终目标主机
  15. 推荐算法理论 :协同过滤
  16. C语言表达式语法分析——递归子程序法
  17. 男装品牌十如仕官宣谢霆锋为品牌代言人
  18. 深入 AXI4总线 (四):RAM 读取实战
  19. ZigBee协议栈安装失败解决方法
  20. linux监听耳机按键,Android 中如何监听耳机键消息

热门文章

  1. centos7 备份系统
  2. 【GPT-3】第1章 大型语言模型时代
  3. python求职意向怎么写_怎样写好求职简历?
  4. 堪萨斯州立大学计算机科学,堪萨斯州立大学有哪些专业?
  5. Openlayers3中如何优雅的表示等值面
  6. 【组合数学】指数型母函数(多重集排列问题)
  7. 微信小程序怎么获取到data数据?
  8. 读《三体_地球往事》
  9. (2)颜色渐变及原理
  10. 钢笔墨水能否代替打印机墨水_喷墨打印机该用染料墨水还是颜料墨水,有什么区别,你会选吗?...