Machine-Learning 编程作业
Programming Exercise 3:Multi-class Classification and Neural Network
1. 多分类逻辑回归
1.1 导入数据集
1.2 可视化部分数据集
1.3 定义代价函数
1.4 定义梯度下降函数
1.5 预测函数进行预测
2. 神经网络
2.1 导入数据
2.2 可视化
2.3 定义预测函数
2.4 输出结果
作业文件打包如下: 链接:https://pan.baidu.com/s/1S6-q29v_zYWUXugWAZk-zg 提取码:h20r
多分类逻辑回归
习题中给出的ex3data1.mat文件包含了 5000 个书写数字的训练样本,每个样本的输入是一张20*20的灰度图,特征是400维。输出是一个标量,取值1-10,1-9分别表示数字1-9,10代表数字0。首先:
1. 导入数据
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.io import loadmat
from scipy.optimize import minimize #高级优化函数
data = loadmat('ex3data1.mat')
X = data['X'] #5000*400的矩阵 5000个训练样本,每一行存储每个样本 20*20的灰度像素
y = data['y'].flatten() #提取标签data['y']是一个5000*1的二维数组,利用flatten()将其转化为5000个元素的一维数组
print(X.shape, y.shape)
输出结果:
2. 可视化
这里随机选取100个样本进行可视化
#定义可视化函数
def display_data(x):
(m, n) = x.shape # 100*400
width = np.round(np.sqrt(n)).astype(int) # 每个样本显示宽度 并转换为int
height = (n / width).astype(int) # 每个样本显示高度 并转换为int
# 设置显示格式 100个样本 分10行 10列显示
rows = np.floor(np.sqrt(m)).astype(int)
cols = np.ceil(m / rows).astype(int)
# 待显示的每张图片之间的间隔
pad = 1
# 显示的布局矩阵10行10列 初始化值为-1
display_arra