吴恩达人工智能

逻辑回归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实现逻辑回归的更多相关文章

  1. 吴恩达机器学习笔记 —— 7 Logistic回归

    http://www.cnblogs.com/xing901022/p/9332529.html 本章主要讲解了逻辑回归相关的问题,比如什么是分类?逻辑回归如何定义损失函数?逻辑回归如何求最优解?如何 ...

  2. 吴恩达机器学习笔记14-逻辑回归(Logistic Regression)

    在分类问题中,你要预测的变量

  3. [C0] 人工智能大师访谈 by 吴恩达

    人工智能大师访谈 by 吴恩达 吴恩达采访 Geoffery Hinton Geoffery Hinton主要观点:要阅读文献,但不要读太多,绝对不要停止编程. Geoffrey Hinton:谢谢你 ...

  4. 吴恩达《机器学习》课程总结(5)_logistic回归

    Q1分类问题 回归问题的输出可能是很大的数,而在分类问题中,比如二分类,希望输出的值是0或1,如何将回归输出的值转换成分类的输出0,1成为关键.注意logistics回归又称 逻辑回归,但他是分类问题 ...

  5. 用纯Python实现循环神经网络RNN向前传播过程(吴恩达DeepLearning.ai作业)

    Google TensorFlow程序员点赞的文章!   前言 目录: - 向量表示以及它的维度 - rnn cell - rnn 向前传播 重点关注: - 如何把数据向量化的,它们的维度是怎么来的 ...

  6. 【吴恩达课程使用】anaconda (python 3.7) win10安装 tensorflow 1.8 cpu版

    [吴恩达课程使用]anaconda (python 3.7) win10安装 tensorflow 1.8 目前tensorflow是只支持到python3.6的,anaconda最新版本已经到pyt ...

  7. 【吴恩达课程使用】keras cpu版安装【接】- anaconda (python 3.7) win10安装 tensorflow 1.8 cpu版

    一.确认tensorflow的版本: 接上一条tensorflow的安装,注意版本不匹配会出现很多问题!:[吴恩达课程使用]anaconda (python 3.7) win10安装 tensorfl ...

  8. 吴恩达老师机器学习课程chapter01——序言+回归

    吴恩达老师机器学习课程01--序言+线性回归 本文是非计算机专业新手的自学笔记,欢迎指正与其他任何合理交流. 本文仅作速查备忘之用,对应吴恩达(AndrewNg)老师的机器学期课程第一章.第二章.第四 ...

  9. 【吴恩达课后编程作业】第二周作业 - Logistic回归-识别猫的图片

    1.问题描述 有209张图片作为训练集,50张图片作为测试集,图片中有的是猫的图片,有的不是.每张图片的像素大小为64*64 吴恩达并没有把原始的图片提供给我们 而是把这两个图片集转换成两个.h5文件 ...

  10. 吴恩达深度学习 反向传播(Back Propagation)公式推导技巧

    由于之前看的深度学习的知识都比较零散,补一下吴老师的课程希望能对这块有一个比较完整的认识.课程分为5个部分(粗体部分为已经看过的): 神经网络和深度学习 改善深层神经网络:超参数调试.正则化以及优化 ...

随机推荐

  1. 深入探究for...range语句

    1. 引言 在Go语言中,我们经常需要对数据集合进行遍历操作.对于数组来说,使用for语句可以很方便地完成遍历.然而,当我们面对其他数据类型,如map.string 和 channel 时,使用普通的 ...

  2. C++面试八股文:std::array如何实现编译器排序?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第25面: 面试官:array熟悉吗? 二师兄:你说的是原生数组还是std::array? 面试官:你觉得两者有什么区别? 二师兄:区别不是很大,原生 ...

  3. Serverless试飞员的夙愿 | 带您扶摇直上,酣畅淋漓的云上作战

    ​上期博文带您体验了外挂云函数Demo包,感受通过云函数使用云数据库快速突破"音障",进入"长机"云函数+"僚机"云数据库的Serverle ...

  4. 自然语言处理 Paddle NLP - 预训练模型产业实践课-理论

    模型压缩:理论基础 模型压缩基本方法分为三类: 量化 裁剪 蒸馏 量化 裁剪 绿线:随机裁剪 30% 已经扛不住了 蓝线:60% 还不错 蒸馏 蒸馏任务与原来的学习任务同时进行. 对于没有标注的数据, ...

  5. 据说,Transformer 不能有效地进行时间序列预测?

    简介 几个月前,我们介绍了 Informer 这个模型,相关论文 (Zhou, Haoyi, et al., 2021) 是一篇获得了 AAAI 2021 最佳论文奖的时间序列论文.我们也展示了一个使 ...

  6. 统信UOS系统开发笔记(八):在统信UOS上编译搭建mqtt基础环境(版本使用QMQTT::Clinet)

    前言   统信uos使用到mqtt开发,需要重新编译mqtt,本篇描述统信uos20上的mqtt源码编译和环境搭建.   注意   这里下载的mqtt版本与其他几篇文章的不同,这里是使用QMQTT:: ...

  7. Centos 7安装Docker镜像仓库-Harbor

    下载安装包并导入镜像 # 进入文件下载目录 cd /root/software/ # 下载安装文件 # 如果下载失败可以本地下载,下载后上传至服务器,https://github.com/goharb ...

  8. Hexo博客Next主题DaoVoice实现在线联系

    注册登录DaoVoice 注册地址如下: http://www.daovoice.io/ 在官网注册帐号需要邀请码,可以输入我的邀请码 b69005f1 复制粘贴代码 修改的hexo的文件路劲如下: ...

  9. 用googletest写cpp单测

    框架概述 Google Test(也称为 googletest)是由 Google 开发的 C++ 单元测试框架.它的首个版本是在2004年发布的,作为 Google 内部的测试框架使用.随后,Goo ...

  10. 2023郑州轻工业大学校赛邀请赛wh

    在这里,很感谢程立老师的帮助和选择我,我以后会跟着程老师,既然热爱,就要走下去! 2022年4月2号,我代表河南工业大学与郑州17所高校在郑州轻工业大学举办的"卓见杯"郑州轻工业大 ...