本次练习的任务是使用逻辑归回和神经网络进行识别手写数字(form 0 to 9, 自动手写数字问题已经应用非常广泛,比如邮编识别。

使用逻辑回归进行多分类分类

练习2 中的logistic 回归实现了二分类分类问题,现在将进行多分类,one vs all。

加载数据集

这次数据时MATLAB 的格式,使用Scipy.io.loadmat 进行加载。Scipy是一个用于数学、科学、工程领域的常用软件包,可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题。它可用于计算Numpy矩阵,使Numpy和Scipy协同工作。

import numpy as np
import scipy.io
from scipy.io import loadmat
import matplotlib.pyplot as plt
import scipy.optimize as optdata = scipy.io.loadmat('ex3data1.mat')
X = data['X']
y = data['y']


数据集共有5000个样本, 每个样本是20*20的灰度图像。

visuazing the data

随机展示100个图像

def display_data(sample_images):fig, ax_array = plt.subplots(nrows=10, ncols=10, figsize=(6, 4))for row in range(10):for column in range(10):ax_array[row, column].matshow(sample_images[10 * row + column].reshape((20, 20)).T, cmap='gray')ax_array[row, column].axis('off')plt.show()returnrand_samples = np.random.permutation(X.shape[0]) # 打乱顺序
sample_images = X[rand_samples[0:100], :]
display_data(sample_images)

Vectorizing Logistic Regression

看一下logistic回归的代价函数:

其中:

进行向量化运算:

def sigmoid(z):return 1 / (1 + np.exp(-z))
def regularized_cost(theta, X, y, l):thetaReg = theta[1:]first = (-y*np.log(sigmoid(X.dot(theta)))) + (y-1)*np.log(1-sigmoid(X.dot(theta)))reg = (thetaReg.dot(thetaReg))*l / (2*len(X))return np.mean(first) + reg

gradient

def regularized_gradient(theta, X, y, l):thetaReg = theta[1:]first = (1 / len(X)) * X.T @ (sigmoid(X.dot(theta)) - y)reg = np.concatenate([np.array([0]), (l / len(X)) * thetaReg])return first + reg

one-vs-all Classification

这个任务,有10个类,logistics是二分类算法,用在多分类上原理就是把所有的数据分为“某类”和“其它类”

from scipy.optimize import minimizedef one_vs_all(X, y, l, K):all_theta = np.zeros((K, X.shape[1]))  # (10, 401)for i in range(1, K+1):theta = np.zeros(X.shape[1])y_i = np.array([1 if label == i else 0 for label in y])ret = minimize(fun=regularized_cost, x0=theta, args=(X, y_i, l), method='TNC',jac=regularized_gradient, options={'disp': True})all_theta[i-1,:] = ret.x             return all_theta

向量化操作检错,经验的机器学习工程师通常会检验矩阵的维度,来确认操作是否正确。

predict

def predict_one_vs_all(all_theta, X):m = np.size(X, 0)# You need to return the following variables correctly# Add ones to the X data matrixX = np.c_[np.ones((m, 1)), X]hypothesis = sigmoid(X.dot(all_theta.T)pred = np.argmax(hypothesis), 1) + 1return pred

这里的hypothesis.shape =[5000 * 10], 对应5000个样本,每个样本对应10个标签的概率。取 概率最大的的值,作为最终预测结果。pred 是最终的5000个样本预测数组。

pred = predict_one_vs_all(all_theta, X)
print('Training Set Accuracy: %.2f%%' % (np.mean(pred == y) * 100))

Neural Networks

这里只需要验证所给权重数据,也就是theta,查看分类准确性。

## ================ Part 2: Loading Pameters ================
print('Loading Saved Neural Network Parameters ...')# Load the weights into variables Theta1 and Theta2
weight = scipy.io.loadmat('ex3weights.mat')
Theta1, Theta2 = weight['Theta1'], weight['Theta2']

predict

def load_weight(path):data = loadmat(path)return data['Theta1'], data['Theta2']theta1, theta2 = load_weight('ex3weights.mat')
theta1.shape, theta2.shapeX = np.insert(X, 0, values=np.ones(X.shape[0]), axis=1)  # intercept
#
#正向传播
a1 = X
z2 = a1.dot(theta1.T)
z2.shape
z2 = np.insert(z2, 0, 1, axis=1)
a2 = sigmoid(z2)
a2.shape
z3 = a2.dot(theta2.T)
z3.shape
a3 = sigmoid(z3)
a3.shapey_pred = np.argmax(a3, axis=1) + 1
accuracy = np.mean(y_pred == y)
print ('accuracy = {0}%'.format(accuracy * 100)) # accuracy = 97.52%

机器学习实践二 -多分类和神经网络相关推荐

  1. 3. 吴恩达机器学习课程-作业3-多分类和神经网络

    fork了别人的项目,自己重新填写,我的代码如下 https://gitee.com/fakerlove/machine-learning/tree/master/code 代码原链接 文章目录 3. ...

  2. 机器学习实践:鸢尾花分类-4

    机器学习实践:鸢尾花分类 1.实验描述 决策树是机器学习中一种简单而又经典的算法.本实验将带领大家学习决策树的基本原理,并学习使用 scikit-learn 来构建一个决策树分类模型,最后使用此模型预 ...

  3. 四、【机器学习作业】多元分类与神经网络(python版ex3)

    多元分类与神经网络 (一)多元分类问题 利用逻辑回归算法进行手写字符识别 (二)神经网络模型(初识) (1) 简单模型 vs 复杂模型 (2)介绍神经网络模型(前馈) (3)神经网络模型的建立 (4) ...

  4. python 多分类逻辑回归_机器学习实践:多分类逻辑回归(softmax回归)的sklearn实现和tensorflow实现...

    本文所有代码及数据可下载. Scikit Learn 篇:Light 版 scikit learn内置了逻辑回归,对于小规模的应用较为简单,一般使用如下代码即可 from sklearn.linear ...

  5. 基于Spark的机器学习实践 (九) - 聚类算法

    0 相关源码 1 k-平均算法(k-means clustering)概述 1.1 回顾无监督学习 ◆ 分类.回归都属于监督学习 ◆ 无监督学习是不需要用户去指定标签的 ◆ 而我们看到的分类.回归算法 ...

  6. 基于Spark的机器学习实践 (七) - 回归算法

    0 相关源码 1 回归分析概述 1.1 回归分析介绍 ◆ 回归与分类类似,只不过回归的预测结果是连续的,而分类的预测结果是离散的 ◆ 如此,使得很多回归与分类的模型可以经过改动而通用 ◆ 因此对于回归 ...

  7. 基于Spark的机器学习实践 (三) - 实战环境搭建

    0 相关源码 1 Spark环境安装 ◆ Spark 由scala语言编写,提供多种语言接口,需要JVM ◆ 官方为我们提供了Spark 编译好的版本,可以不必进行手动编译 ◆ Spark安装不难,配 ...

  8. 独家思维导图!让你秒懂李宏毅2020机器学习(二)—— Classification分类

    独家思维导图!让你秒懂李宏毅2020机器学习(二)-- Classification分类 在上一篇文章我总结了李老师Introduction和regression的具体内容,即1-4课的内容,这篇我将 ...

  9. 30天数据分析与机器学习实践之Day16——Python文本数据分析:新闻分类任务

    30天数据分析与机器学习实践之Day16--Python文本数据分析:新闻分类任务 一.文本分析与关键词提取 1.1文本数据 1.2停用词 1.语料中大量出现2.没啥大用3.留着过年嘛? 1.3Tf- ...

最新文章

  1. webpack4.0打包优化策略(二)
  2. Spring Boot加载配置文件
  3. 程序员求职成功路(2) - 第3章 数据结构与算法
  4. vue商品列表滚动效果_如何处理前端超长列表
  5. web前端入门学习 css(7)css高级技巧 (精灵图、字体图标、css三角、鼠标样式、表单轮廓线、文本框拖拽、垂直对齐、图底空白缝隙、margin负值、溢出文字省略号、文字环绕、css初始化)
  6. 字符串匹配算法(一):BF(BruteForce)算法和RK(RabinKarp)算法
  7. 基础拾遗------泛型详解
  8. leetcode1351. 统计有序矩阵中的负数(二分查找)
  9. 全球各国家.INFO域名注册量统计:中国排名第八
  10. 又一款神器:半小时带你轻松上手k8s
  11. 万事无忧之看看网站的PR值
  12. java json处理入门
  13. 无需无线路由,将系统为win7的笔记本变成wifi的方法
  14. Inpaint2021一款非常强大图片去水印神器
  15. matlab数学建模-遗传算法基本原理
  16. UPC6615: Snuke Festival
  17. 教育部计算机考研大纲,2021考研计算机大纲计算机网络部分考查内容
  18. 指尖菜谱App从0到1-项目开发准备
  19. C#练习题答案: 字母战争 - 核打击【难度:3级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战
  20. 如何提高场馆的二次成交率?

热门文章

  1. C/S、B/S的区别
  2. 进程常用指令 (从创建到回收 包含守护)
  3. MySQL优化原理分析及优化方案总结
  4. web开发者工具,261页前端面试题宝典,通用流行框架大全
  5. 我凭什么拿到了阿里、腾讯、今日头条3家大厂offer?这原因我服了
  6. Daily scrum 10.15
  7. flask第一章:项目环境搭建
  8. (二十)python 3 匿名函数
  9. 利用python脚本程序监控文件被修改
  10. intellig idea中jsp或html数据没有自动保存和更换字体