Machine Learning-Ex3(吴恩达课后习题)

目录

1. Multi-class Classification

1.1 Dataset

1.2 Visualizing the data

1.3 Vectorizing Logistic Regression

1.3.1 Vectorizing the cost function(no regularization)

1.3.2 Vectorizing the gradient(no regularization)

1.3.3 Vectorizing regularized logistic regression​

1.4 One-vs-all Classification

1.4.1 One-vs-all Prediction 

2. Neural Networks

2.1 Model representation

2.2 Feedforward Propagation and Prediction​


内容:5000个20*20像素的手写字体图像与它对应的数字,其中数字0的值用10表示。

main.py

 

{'__header__': b'MATLAB 5.0 MAT-file, Platform: GLNXA64, Created on: Sun Oct 16 13:09:09 2011', '__version__': '1.0', '__globals__': [], 'X': array([[0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       ...,
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.],
       [0., 0., 0., ..., 0., 0., 0.]]), 'y': array([[10],
       [10],
       [10],
       ...,
       [ 9],
       [ 9],
       [ 9]], dtype=uint8)}
(5000, 400) (5000, 1)

内容:随机展示100个数据。

main.py

 

[[0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 ...
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]
 [0. 0. 0. ... 0. 0. 0.]]

plot_training_set.py

 

main.py 

 

内容:因为有10个数字类别,所以我们要做10个不同的逻辑回归分类器。将逻辑回归向量化会使训练效率更加高效。

sigmoid.py

 

cost_function.py(with regularization)

 
 

gradient.py

 
 

gradient.py

 
 

内容:构建分类器,由于逻辑回归只能在两个类别之间进行分类,所以我们需要多类分类的策略。对于每一个分类器我们只需要判断它的类别是'i'或者不是'i'即可。

one_vs_all.py

 

main.py

 

[[-2.38358610e+00  0.00000000e+00  0.00000000e+00 ...  1.30435711e-03
  -7.45365860e-10  0.00000000e+00]
 [-3.18324551e+00  0.00000000e+00  0.00000000e+00 ...  4.45577193e-03
  -5.07998907e-04  0.00000000e+00]
 [-4.79716788e+00  0.00000000e+00  0.00000000e+00 ... -2.87443285e-05
  -2.47862001e-07  0.00000000e+00]
 ...
 [-7.98546406e+00  0.00000000e+00  0.00000000e+00 ... -8.95211947e-05
   7.22094621e-06  0.00000000e+00]
 [-4.57261766e+00  0.00000000e+00  0.00000000e+00 ... -1.33564925e-03
   9.98868166e-05  0.00000000e+00]
 [-5.40500039e+00  0.00000000e+00  0.00000000e+00 ... -1.16648642e-04
   7.88651180e-06  0.00000000e+00]]

内容:使用之前训练好的分类器来预测标签(概率最大的那一类即为标签,精确度可达94%)。

predict_all.py

 

main.py

 

              precision    recall  f1-score   support

           1       0.95      0.99      0.97       500
           2       0.95      0.92      0.93       500
           3       0.95      0.91      0.93       500
           4       0.95      0.95      0.95       500
           5       0.92      0.92      0.92       500
           6       0.97      0.98      0.97       500
           7       0.95      0.95      0.95       500
           8       0.93      0.92      0.92       500
           9       0.92      0.92      0.92       500
          10      0.97      0.99      0.98       500

    accuracy                           0.94      5000
   macro avg       0.94      0.94      0.94      5000
weighted avg       0.94      0.94      0.94      5000

内容:神经网络可以处理比较复杂的非线性模型,这里给出了已经训练好的权重,我们使用前向传播即可。

内容:

theta1:25*401     theta2:10*26

main.py

 

 (25, 401) (10, 26) (5000, 401) (5000, 1)

sigmoid.py

 

main.py(输出a3,即h_theta的值)

 

[[1.12661530e-04 1.74127856e-03 2.52696959e-03 ... 4.01468105e-04
  6.48072305e-03 9.95734012e-01]
 [4.79026796e-04 2.41495958e-03 3.44755685e-03 ... 2.39107046e-03
  1.97025086e-03 9.95696931e-01]
 [8.85702310e-05 3.24266731e-03 2.55419797e-02 ... 6.22892325e-02
  5.49803551e-03 9.28008397e-01]
 ...
 [5.17641791e-02 3.81715020e-03 2.96297510e-02 ... 2.15667361e-03
  6.49826950e-01 2.42384687e-05]
 [8.30631310e-04 6.22003774e-04 3.14518512e-04 ... 1.19366192e-02
  9.71410499e-01 2.06173648e-04]
 [4.81465717e-05 4.58821829e-04 2.15146201e-05 ... 5.73434571e-03
  6.96288990e-01 8.18576980e-02]]

进行预测(精确度可以达到97%): 

main.py

 

              precision    recall  f1-score   support

           1       0.97      0.98      0.98       500
           2       0.98      0.97      0.98       500
           3       0.98      0.96      0.97       500
           4       0.97      0.97      0.97       500
           5       0.97      0.98      0.98       500
           6       0.98      0.99      0.98       500
           7       0.98      0.97      0.97       500
           8       0.98      0.98      0.98       500
           9       0.97      0.96      0.96       500
          10      0.98      0.99      0.99       500

    accuracy                           0.98      5000
   macro avg       0.98      0.98      0.98      5000
weighted avg       0.98      0.98      0.98      5000