吴恩达人工智能-python实现逻辑回归
吴恩达人工智能
逻辑回归python代码实现
逐行注释
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
# 逻辑回归算法实现
# sigmoid函数和初始化数据
# 数组说第几列全是从0开始
def sigmoid(z):
return 1 / (1 + np.exp(-z))
# 初始化数据,载入新数据
def init_data():
data = np.loadtxt('data.csv')
# 截取数据集第0列到第倒数第二列而且是正向的排序,0,1,2...-1
# 也就是排除分类结果的那些列
dataMatIn = data[:, 0:-1]
# dataY是dataMatIn在第0列添加新的一列,全为1
dataY = np.insert(dataMatIn, 0, 1, axis=1)
# 第一列平方,构造关于第一列的平方根函数,
dataMatIn[:, 1] = np.power(dataMatIn[:, 1], 2)
# dataMatIn[:, 0] = np.power(dataMatIn[:, 0], 2)
dataMatIn = np.insert(dataMatIn, 0, 1, axis=1) # 特征数据集,添加1是构造常数项x0
# 进行特征缩放
# for i in range(1,3):
#
# dataMatIn[:,i]=(dataMatIn[:,i]-np.mean(dataMatIn[:,i],axis=0))/np.std(dataMatIn[:,i])
# classLabels是数据集的第1列,也是倒数第二列
classLabels = data[:, -1]
return dataY, dataMatIn, classLabels
# 梯度下降
def grad_descent(dataMatIn, classLabels):
# dataMatrix是矩阵化的dataMatIn
dataMatrix = np.mat(dataMatIn) # (m,n)
# labelMat是矩阵化的classLabels,并转置
labelMat = np.mat(classLabels).transpose()
# m是行,即有多少训练数据,n是列,
m, n = np.shape(dataMatrix)
# weights即为参数,初始化全为1
weights = np.ones((n, 1)) # 初始化回归系数(n, 1)
alpha = 0.01 # 步长
maxCycle = 5000 # 最大循环次数
# 进入梯度下降训练循环
for i in range(maxCycle):
# h是经过激活函数的 参数乘训练集(假设函数)
h = sigmoid(dataMatrix * weights) # sigmoid 函数
# 精髓的一步
# 用向量的方法实现梯度下降wj=wj-a/m*(sum(hi-yi)*xj)
# 此处是没有进行正则化的编码(正则化目的是消除过拟合)
weights = weights + alpha * dataMatrix.transpose() * (labelMat - h) / m # 梯度
# print(weights,'\n+')
# print(alpha,'\n*')
# print(dataMatrix.transpose(),'\n*')
# print(labelMat-h)
# print("=============================================================")
# weights = weights - alpha * (1/m) * (h-labelMat) * ( dataMatrix.)
return weights
# 正则化逻辑回归代码,非向量表示的
"""
def costReg(theta, X, y, learningRate):
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)))
reg = (learningRate / (2 * len(X)) * np.sum(np.power(theta[:, 1:theta.shape[1]], 2))
return np.sum(first -second) / (len(X)) + reg
"""
# 绘图
def plotBestFIt(weights):
dataY, dataMatIn, classLabels = init_data()
n = np.shape(dataMatIn)[0]
xcord1 = []
ycord1 = []
xcord2 = []
ycord2 = []
for i in range(n):
if classLabels[i] == 1:
xcord1.append(dataY[i][1])
ycord1.append(dataY[i][2])
else:
xcord2.append(dataY[i][1])
ycord2.append(dataY[i][2])
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')
ax.scatter(xcord2, ycord2, s=30, c='green')
x = np.arange(-3, 3, 0.1)
y = np.sqrt(((-weights[0, 0] - weights[1, 0] * x) / weights[2, 0])) # matix
ax.plot(x, y)
plt.xlabel('X1')
plt.ylabel('X2')
plt.show()
# 计算结果
if __name__ == '__main__':
dataY, dataMatIn, classLabels = init_data()
r = grad_descent(dataMatIn, classLabels)
print(r)
plotBestFIt(r)
吴恩达人工智能-python实现逻辑回归的更多相关文章
- 吴恩达机器学习笔记 —— 7 Logistic回归
http://www.cnblogs.com/xing901022/p/9332529.html 本章主要讲解了逻辑回归相关的问题,比如什么是分类?逻辑回归如何定义损失函数?逻辑回归如何求最优解?如何 ...
- 吴恩达机器学习笔记14-逻辑回归(Logistic Regression)
在分类问题中,你要预测的变量
- [C0] 人工智能大师访谈 by 吴恩达
人工智能大师访谈 by 吴恩达 吴恩达采访 Geoffery Hinton Geoffery Hinton主要观点:要阅读文献,但不要读太多,绝对不要停止编程. Geoffrey Hinton:谢谢你 ...
- 吴恩达《机器学习》课程总结(5)_logistic回归
Q1分类问题 回归问题的输出可能是很大的数,而在分类问题中,比如二分类,希望输出的值是0或1,如何将回归输出的值转换成分类的输出0,1成为关键.注意logistics回归又称 逻辑回归,但他是分类问题 ...
- 用纯Python实现循环神经网络RNN向前传播过程(吴恩达DeepLearning.ai作业)
Google TensorFlow程序员点赞的文章! 前言 目录: - 向量表示以及它的维度 - rnn cell - rnn 向前传播 重点关注: - 如何把数据向量化的,它们的维度是怎么来的 ...
- 【吴恩达课程使用】anaconda (python 3.7) win10安装 tensorflow 1.8 cpu版
[吴恩达课程使用]anaconda (python 3.7) win10安装 tensorflow 1.8 目前tensorflow是只支持到python3.6的,anaconda最新版本已经到pyt ...
- 【吴恩达课程使用】keras cpu版安装【接】- anaconda (python 3.7) win10安装 tensorflow 1.8 cpu版
一.确认tensorflow的版本: 接上一条tensorflow的安装,注意版本不匹配会出现很多问题!:[吴恩达课程使用]anaconda (python 3.7) win10安装 tensorfl ...
- 吴恩达老师机器学习课程chapter01——序言+回归
吴恩达老师机器学习课程01--序言+线性回归 本文是非计算机专业新手的自学笔记,欢迎指正与其他任何合理交流. 本文仅作速查备忘之用,对应吴恩达(AndrewNg)老师的机器学期课程第一章.第二章.第四 ...
- 【吴恩达课后编程作业】第二周作业 - Logistic回归-识别猫的图片
1.问题描述 有209张图片作为训练集,50张图片作为测试集,图片中有的是猫的图片,有的不是.每张图片的像素大小为64*64 吴恩达并没有把原始的图片提供给我们 而是把这两个图片集转换成两个.h5文件 ...
- 吴恩达深度学习 反向传播(Back Propagation)公式推导技巧
由于之前看的深度学习的知识都比较零散,补一下吴老师的课程希望能对这块有一个比较完整的认识.课程分为5个部分(粗体部分为已经看过的): 神经网络和深度学习 改善深层神经网络:超参数调试.正则化以及优化 ...
随机推荐
- 【python基础】循环语句-continue关键字
1.continue关键字 continue关键字的作用是:用来告诉 Python 跳过当前循环代码块中的剩余语句,然后继续进行下一轮循环. 其在while循环和for循环中的作用示意图如下 我们通过 ...
- boot 项目启动:Error starting ApplicationContext. To display the conditions report re-run
Error starting ApplicationContext. To display the conditions report re-run 问题描述 boot 工程启动不了 原因分析: 以后 ...
- P3133 [USACO16JAN] Radio Contact G 无线电通话
P3133 [USACO16JAN] Radio Contact G 无线电通话 目录 P3133 [USACO16JAN] Radio Contact G 无线电通话 [USACO16JAN] Ra ...
- GoFrame v2.5 版本发布,企业级 Golang 开发框架
大家好啊,GoFrame 框架今天发布了 v2.5.0 正式版本啦! 本次版本主要是对已有功能组件以及开发工具上的改进工作.其中,开发工具新增了 gf gen ctrl 命令,以规范化定义.开发 AP ...
- 并发编程-FutureTask解析
1.FutureTask对象介绍 Future对象大家都不陌生,是JDK1.5提供的接口,是用来以阻塞的方式获取线程异步执行完的结果. 在Java中想要通过线程执行一个任务,离不开Runnable与C ...
- 关于selenium WebDriverException: Message: unknown error: DevToolsActivePort file doesnt exist 的解决方案
文章参考: https://hant-kb.kutu66.com/others/post_13460379 在浏览器设置参数时加入如下两行代码 1 # 取消沙盒模式 2 options.add_arg ...
- 超详细的webpack之开始体验吧
webpack是一个前端工程化非常重要静态模块化打包工具,可以帮我们把 less.sass.esmodule.commonjs 等模块依赖处理成浏览器可识别的静态资源. 虽然webpack非常好用,但 ...
- [kubernetes]集群中部署CoreDNS服务
前言 从k8s 1.11版本开始,k8s集群的dns服务由CoreDNS提供.之前已经使用二进制文件部署了一个三master三node的k8s集群,现在需要在集群内部部署DNS服务. 环境信息 IP ...
- 何时使用Elasticsearch而不是MySql
MySQL 和 Elasticsearch 是两种不同的数据管理系统,它们各有优劣,适用于不同的场景.本文将从以下几个方面对它们进行比较和分析: 数据模型 查询语言 索引和搜索 分布式和高可用 性能和 ...
- 如何爆破js加密后的密码?
如何爆破js加密后的密码? 1.首先burp中安装插件: https://github.com/whwlsfb/BurpCrypto 安装插件完毕后,分析进行js加密的算法. 2.分析加密过程: 找到 ...