吴恩达人工智能-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个部分(粗体部分为已经看过的): 神经网络和深度学习 改善深层神经网络:超参数调试.正则化以及优化 ...
随机推荐
- Windows全能终端神器MobaXterm
MobaXterm 又名 MobaXVT,是一款增强型终端.X 服务器和 Unix 命令集(GNU/ Cygwin)工具箱. MobaXterm 可以开启多个终端视窗,以最新的 X 服务器为基础的 X ...
- 手牵手带你实现mini-vue
1 前言 随着 Vue.React.Angularjs 等框架的诞生,数据驱动视图的理念也深入人心,就 Vue 来说,它拥有着双向数据绑定.虚拟dom.组件化.视图与数据相分离等等造福程序员的优点,那 ...
- 多个视频文件合成画中画效果(Python、ffmpeg)
Step 1 从视频中分离出音频(MP4->mp3) def separateMp4ToMp3(tmp): mp4 = tmp.replace('.tmp', '.mp4') print('-- ...
- 解决 echarts柱状图x轴数据隔一个显示
echarts柱状图x轴数据隔一个显示 在显示一个柱状图的时候,x轴的数据是隔一个显示的,但是hover的时候却能显示出当前轴x轴的名称,如下图: 那就只能说明这个轴的名称太长了,所以导致它默认就 ...
- Git无法push提示报错443
更新 设置代理不能完美解决问题,需要检查本地的SSH配置是否正确,以及正确配置SSH密钥关联github账户 配置SSH参考链接: <GitHub如何配置SSH Key> https:// ...
- 用git bash 生成 hexo 博客文件,报错node: command not found
有git bash,也安装了node.js, 为什么在bash里面会说node: command not found? 电脑有段时间不能上网,下载了360系统急救箱,删了很多文件,包括一些exe文件, ...
- 【转载】Linux虚拟化KVM-Qemu分析(四)之CPU虚拟化(2)
原文信息: 作者:LoyenWang 出处:https://www.cnblogs.com/LoyenWang/ 公众号:LoyenWang 版权:本文版权归作者和博客园共有 转载:欢迎转载,但未经作 ...
- Hugging News #0717: 开源大模型榜单更新、音频 Transformers 课程完成发布!
每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...
- Cilium系列-1-Cilium特色 功能及适用场景
系列文章 Cilium 系列文章 Cilium 简介 Cilium 是一个开源的云原生解决方案,用于提供.保护(安全功能)和观察(监控功能)工作负载之间的网络连接,由革命性的内核技术 eBPF 提供动 ...
- ranger2.1.0源码编译以及安装
ranger2.1.0源码编译以及安装 编译环境准备 环境需求 示例版本 JDK8 Java(TM) SE Runtime Environment (build 1.8.0_231-b11) mave ...