From 44f6362737fa7780a1068e7f04ee585fab66b454 Mon Sep 17 00:00:00 2001 From: SJ2050cn Date: Sun, 21 Nov 2021 22:41:54 +0800 Subject: [PATCH] Finished the homework04. --- .../homework/README.md | 64 ++++++++--- .../homework/code/multi_classification.py | 39 +++++++ .../homework/code/sklearn_regression.py | 38 +++++++ .../homework/code/softmax_regression.py | 106 ++++++++++++++++++ .../homework/images/accuracy_sklearn.png | Bin 0 -> 21575 bytes .../homework/images/accuracy_softmax.png | Bin 0 -> 22120 bytes .../images/predict_result_sklearn.png | Bin 0 -> 17635 bytes .../images/predict_result_softmax.png | Bin 0 -> 17066 bytes 8 files changed, 233 insertions(+), 14 deletions(-) create mode 100644 homework_04_logistic_regression/homework/code/multi_classification.py create mode 100644 homework_04_logistic_regression/homework/code/sklearn_regression.py create mode 100644 homework_04_logistic_regression/homework/code/softmax_regression.py create mode 100644 homework_04_logistic_regression/homework/images/accuracy_sklearn.png create mode 100644 homework_04_logistic_regression/homework/images/accuracy_softmax.png create mode 100644 homework_04_logistic_regression/homework/images/predict_result_sklearn.png create mode 100644 homework_04_logistic_regression/homework/images/predict_result_softmax.png diff --git a/homework_04_logistic_regression/homework/README.md b/homework_04_logistic_regression/homework/README.md index bbe04d0..b93b1fd 100644 --- a/homework_04_logistic_regression/homework/README.md +++ b/homework_04_logistic_regression/homework/README.md @@ -16,36 +16,40 @@ g(z_i)=\frac{e^{z_{i}}}{\sum\limits_{j=1}^{n} e^{z_{j}}} $$ 其中,n表示多个输出或类别数,$z_j$为第$j$个输出或类别的值,$i$表示当前需要计算的类别。从上述公式中可以看出,Softmax函数的计算结果落在$[0,\ 1]$中,且所有类别的Softmax函数值之和等于1。 -​ 在输入到输出之间引入一层函数映射,取$\mathbf{\Theta}^T\cdot\mathbf{x}=\mathbf{z}$,其中$\mathbf{\Theta}=[\theta_1,\ \theta_2,\ ,...,\ \theta_n]$为权重系数,$\theta$为权重向量,$\mathbf{x}$为输入向量,$\mathbf{z}$为输出向量,则Softmax函数可以写成: +​ 在输入到输出之间引入一层函数映射,取$\mathbf{\Theta}^T\cdot\mathbf{x}+\mathbf{b}=\mathbf{z}$,其中$\mathbf{\Theta}=[\theta_1,\ \theta_2,\ ,...,\ \theta_n]$为权重系数,$\theta$为权重向量,$\mathbf{x}$为输入向量,$\mathbf{z}$为输出向量,则Softmax函数可以写成: $$ -g(z_i)=g(\theta_i^T \mathbf{x})=\frac{e^{\theta_i^T\mathbf{x}}}{\sum\limits_{j=1}^{n} e^{\theta_j^T \mathbf{x}}}=h_{\theta_i}(\mathbf{x}) +g(z_i)=g(\theta_i^T \mathbf{x}+b_i)=\frac{e^{\theta_i^T\mathbf{x}+b_i}}{\sum\limits_{j=1}^{n} e^{\theta_j^T \mathbf{x}+b_j}}=h_{\theta_i, b_i}(\mathbf{x}) $$ 构造似然函数,若有$m$个训练样本: $$ \begin{aligned} -L(\Theta)&=p(\mathbf{y}|\mathbf{X};\Theta) \\\\ -& = \prod\limits_{i=1}^{m} p(y^{i}|\mathbf{x}^{i};\Theta) \\\\ -& = \prod_{i=1}^m h_{\theta_i}(\mathbf{x}) +L(\Theta;\mathbf{b})&=p(\mathbf{y}|\mathbf{X};\Theta,\mathbf{b}) \\\\ +& = \prod\limits_{i=1}^{m} p(y^{i}|\mathbf{x}^{i};\Theta,\mathbf{b}) \\\\ +& = \prod_{i=1}^m h_{\theta_i,b_i}(\mathbf{x}) \end{aligned} $$ 对似然函数取对数,转换为: $$ -l(\Theta)=log(L(\Theta))=\sum\limits_{i=1}^m log(h_{\theta_i}(\mathbf{x})) +l(\Theta,\mathbf{b})=log(L(\Theta),\mathbf{b})=\sum\limits_{i=1}^m log(h_{\theta_i,b_i}(\mathbf{x})) $$ -对$log(h_{\theta_i}(\mathbf{x}))$求导得到: +对$log(h_{\theta_i,b_i}(\mathbf{x}))$对$z_k$求导得到: $$ -\frac{\partial{log(h_{\theta_i}(\mathbf{x}))}}{\partial{z_k}}=\begin{cases} -1-h_{\theta_k}(\mathbf{x}) & \text{ if } k=i \\\\ --h_{\theta_k}(\mathbf{x}) & else +\frac{\partial{log(h_{\theta_i,b_i}(\mathbf{x}))}}{\partial{z_k}}=\begin{cases} +1-h_{\theta_k,b_k}(\mathbf{x}) & \text{ if } k=i \\\\ +-h_{\theta_k,b_k}(\mathbf{x}) & else \end{cases} $$ 转换后的似然函数对$\theta$求偏导,在这里我们以只有一个训练样本的情况为例: $$ \begin{aligned} -\frac{\partial}{\partial\theta_k}l(\Theta)&=\frac{\partial l(\Theta)}{\partial{z_k}}\cdot \frac{\partial z_k}{\partial \theta_k} \\\\ -&=(y_k-h_{\theta_k}(\mathbf{x}))\mathbf{x} +\frac{\partial}{\partial\theta_k}l(\Theta,\mathbf{b})&=\frac{\partial l(\Theta,\mathbf{b})}{\partial{z_k}}\cdot \frac{\partial z_k}{\partial \theta_k} \\\\ +&=(y_k-h_{\theta_k,b_k}(\mathbf{x}))\mathbf{x} \end{aligned} $$ +对偏置项$b$求偏导与上述类似: +$$ +\frac{\partial}{\partial b_k}l(\Theta,\mathbf{b})=y_k-h_{\theta_k,b_k}(\mathbf{x}) +$$ 上式中$y_k$的表达式如下: $$ y_k=\begin{cases} @@ -53,8 +57,40 @@ y_k=\begin{cases} 0 & else \end{cases} $$ -此时,我们就可以写出最大化似然函数的更新方向,$\theta_k$的迭代表示为: +此时,我们就可以写出最大化似然函数的更新方向,$\theta_k$与$b_k$的迭代表示为: +$$ +\theta_k=\theta_k+\eta(\sum\limits_{i=1}^{m}(y_k-h_{\theta_k,b_k}(\mathbf{x}^i))\cdot \mathbf{x}^i) $$ -\theta_k=\theta_k+\eta(\sum\limits_{i=1}^{m}(y_k-h_{\theta_k}(\mathbf{x}^i))\cdot \mathbf{x}^i) $$ +b_k = b_k+\eta (\sum\limits_{i=1}^{m}(y_k-h_{\theta_k,b_k})) +$$ + 其中$\eta$为学习率,可以看到,当输出向量的维度等于2时,即二分类时,上式与二分类中权重向量的迭代公式相等。 + + + +## 三、运行结果 + +​ 使用的数据是sklearn中的digital数据,其每一个样本由64个像素组成,输出结果是0-9中的一个数。由于输入和输出都是一个高维向量,最后结果采用confusion matrix可视化出来,其主对角线上的个数为预测正确的数目,其余位置上的元素为预测失败的样本个数。 + +​ 由于sklearn中的digital数据有1700多个样本数据,我们将前1200多个样本作为训练数据,最后500个作为测试数据,分别采用自己实现的softmax回归方法以及sklearn内置的OVR多分类方法进行训练并预测。 + +softmax回归的confusion matrix: + +![](images/predict_result_softmax.png) + +softmax回归在训练数据上的预测精度以及在测试数据上的预测精度为: + +![](images/accuracy_softmax.png) + + + +使用sklearn内置的多分类方法运行结果的confusion matrix: + +![](images/predict_result_sklearn.png) + +sklearn内置的多分类方法在训练数据上的预测精度以及在测试数据上的预测精度为: + +![](images/accuracy_sklearn.png) + +从上面的运行结果中来看,自己实现的softmax方法以及sklearn内置的多分类方法最后在测试数据上的预测精度都达到了0.9以上,二者的差距非常的小。 diff --git a/homework_04_logistic_regression/homework/code/multi_classification.py b/homework_04_logistic_regression/homework/code/multi_classification.py new file mode 100644 index 0000000..49bd204 --- /dev/null +++ b/homework_04_logistic_regression/homework/code/multi_classification.py @@ -0,0 +1,39 @@ +''' +Author: SJ2050 +Date: 2021-11-21 17:22:02 +LastEditTime: 2021-11-21 22:05:09 +Version: v0.0.1 +Description: Use softmax regression method to solve multiclass classification problems. +Copyright © 2021 SJ2050 +''' + +import matplotlib.pyplot as plt +from sklearn.datasets import load_digits +from sklearn.linear_model import LogisticRegression +from sklearn.metrics import confusion_matrix +from sklearn.metrics import accuracy_score +from softmax_regression import SoftmaxRegression + +# load data +digits = load_digits() +x_train = digits.data[:-500] +y_train = digits.target[:-500] +softmax_reg = SoftmaxRegression() +softmax_reg.train(x_train, y_train) + +# plot confusion matrix +x_test = digits.data[-500:] +y_test = digits.target[-500:] +pred_train = softmax_reg.predict(x_train) +pred_test = softmax_reg.predict(x_test) + +print(f'accuracy train = {accuracy_score(y_train, pred_train)}') +print(f'accuracy test = {accuracy_score(y_test, pred_test)}') + +cm = confusion_matrix(y_test, pred_test) +plt.matshow(cm) +plt.title(u'Confusion Matrix') +plt.colorbar() +plt.ylabel(u'Groundtruth') +plt.xlabel(u'Predict') +plt.show() diff --git a/homework_04_logistic_regression/homework/code/sklearn_regression.py b/homework_04_logistic_regression/homework/code/sklearn_regression.py new file mode 100644 index 0000000..95263a1 --- /dev/null +++ b/homework_04_logistic_regression/homework/code/sklearn_regression.py @@ -0,0 +1,38 @@ +''' +Author: SJ2050 +Date: 2021-11-21 18:24:41 +LastEditTime: 2021-11-21 18:50:47 +Version: v0.0.1 +Description: Use sklearn to solve logistic regression problems. +Copyright © 2021 SJ2050 +''' +import matplotlib.pyplot as plt +from sklearn.datasets import load_digits +from sklearn.linear_model import LogisticRegression +from sklearn.metrics import confusion_matrix +from sklearn.metrics import accuracy_score + +# load data +digits = load_digits() +x_train = digits.data[:-500] +y_train = digits.target[:-500] + +log_reg=LogisticRegression() +log_reg.fit(x_train, y_train) + +# plot confusion matrix +x_test = digits.data[-500:] +y_test = digits.target[-500:] +pred_train = log_reg.predict(x_train) +pred_test = log_reg.predict(x_test) + +print(f'accuracy train = {accuracy_score(y_train, pred_train)}') +print(f'accuracy test = {accuracy_score(y_test, pred_test)}') + +cm = confusion_matrix(y_test, pred_test) +plt.matshow(cm) +plt.title(u'Confusion Matrix') +plt.colorbar() +plt.ylabel(u'Groundtruth') +plt.xlabel(u'Predict') +plt.show() diff --git a/homework_04_logistic_regression/homework/code/softmax_regression.py b/homework_04_logistic_regression/homework/code/softmax_regression.py new file mode 100644 index 0000000..3e5e125 --- /dev/null +++ b/homework_04_logistic_regression/homework/code/softmax_regression.py @@ -0,0 +1,106 @@ +''' +Author: SJ2050 +Date: 2021-11-21 17:06:31 +LastEditTime: 2021-11-21 22:29:52 +Version: v0.0.1 +Description: Softmax regerssion. +Copyright © 2021 SJ2050 +''' +import numpy as np + +def softmax(Z): + assert(len(Z.shape) == 2 and Z.shape[1] == 1, 'Z should be a column vector!') + Z_exp = np.exp(Z) + return Z_exp/Z_exp.sum(0, keepdims=True) + +class SoftmaxRegression(): + def __init__(self): + self.is_trained = False + pass + + def train(self, train_data, train_label, num_iterations=150, alpha=0.01): + self.train_data = train_data + self.train_label = train_label + self.classes = np.unique(self.train_label) + self.out_dim = len(self.classes) + + train_data_num, self.inp_dim = np.shape(self.train_data) + self.weights = np.random.random((self.inp_dim, self.out_dim)) + self.b = np.random.random((self.out_dim, 1)) + + y = lambda k, cls: 1 if k == cls else 0 + weights_grad = [[] for i in range(self.out_dim)] + for j in range(num_iterations): + # print(f'iteration: {j}') + data_index = list(range(train_data_num)) + for i in range(train_data_num): + rand_index = int(np.random.uniform(0, len(data_index))) + # x_vec = np.vstack(self.train_data[rand_index]) + x_vec = self.train_data[rand_index].reshape(-1, 1) + softmax_values = softmax(np.dot(self.weights.T, x_vec)+self.b)[:, 0] + label =self.train_label[rand_index] + cls = np.argwhere(self.classes == label)[0][0] + error = lambda k: y(k, cls)-softmax_values[k] + + for k in range(self.out_dim): + err = error(k) + # self.weights += np.pad(alpha*err*x_vec, ((0, 0), (k, self.out_dim-1-k)), \ + # 'constant', constant_values=0) + weights_grad[k] = (alpha*err*x_vec)[:, 0] + # print(self.weights) + self.b[k, 0] += alpha*err + self.weights += np.array(weights_grad).T + + del(data_index[rand_index]) + + self.is_trained = True + + + def predict(self, predict_data): + if self.is_trained: + predict_num = len(predict_data) + result = np.empty(predict_num) + for i in range(predict_num): + # x_vec = np.vstack(predict_data[i]) + x_vec = predict_data[i].reshape(-1, 1) + result[i] = self.classes[np.argmax(softmax(np.dot(self.weights.T, x_vec)+self.b))] + + return result + else: + print('Need training before predicting!!') + +if __name__ == '__main__': + # test binary classsfication + import matplotlib.pyplot as plt + import sklearn.datasets + from sklearn.metrics import accuracy_score + + def plot_decision_boundary(predict_func, data, label): + """画出结果图 + Args: + pred_func (callable): 预测函数 + data (numpy.ndarray): 训练数据集合 + label (numpy.ndarray): 训练数据标签 + """ + x_min, x_max = data[:, 0].min() - .5, data[:, 0].max() + .5 + y_min, y_max = data[:, 1].min() - .5, data[:, 1].max() + .5 + h = 0.01 + + xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) + + Z = predict_func(np.c_[xx.ravel(), yy.ravel()]) + Z = Z.reshape(xx.shape) + + plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral) #画出登高线并填充 + plt.scatter(data[:, 0], data[:, 1], c=label, cmap=plt.cm.Spectral) + plt.show() + + data, label = sklearn.datasets.make_moons(200, noise=0.30) + plt.scatter(data[:,0], data[:,1], c=label) + plt.title("Original Data") + + softmax_reg = SoftmaxRegression() + softmax_reg.train(data, label, 200) + plot_decision_boundary(lambda x: softmax_reg.predict(x), data, label) + y_train = softmax_reg.predict(data) + print(f'accuracy train = {accuracy_score(label, y_train)}') diff --git a/homework_04_logistic_regression/homework/images/accuracy_sklearn.png b/homework_04_logistic_regression/homework/images/accuracy_sklearn.png new file mode 100644 index 0000000000000000000000000000000000000000..4f56c245fc2691427abbe2eb5ca2a8cda434e9d9 GIT binary patch literal 21575 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 D(_vvs literal 0 HcmV?d00001 diff --git a/homework_04_logistic_regression/homework/images/accuracy_softmax.png b/homework_04_logistic_regression/homework/images/accuracy_softmax.png new file mode 100644 index 0000000000000000000000000000000000000000..5b29fddb45cce3306aa5f4ba9ca45ded6943ec65 GIT binary patch literal 22120 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
  • GJ$>Wj9dv@uRWmt19$} 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 literal 0 HcmV?d00001 diff --git a/homework_04_logistic_regression/homework/images/predict_result_softmax.png b/homework_04_logistic_regression/homework/images/predict_result_softmax.png new file mode 100644 index 0000000000000000000000000000000000000000..234f32c1446a1cd76dfa1a41291bef77a85e62ed GIT binary patch literal 17066 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 literal 0 HcmV?d00001