本文主要用于记录已经写好,以后可以直接调用的代码段,不会对原理和公式推导进行说明,但是只要把数据集路径修改后,在每台机器上都可以直接用的。
import math
import numpy as np
import random
import gzip # 解压数据集
import pickle # 将解压后的数据集划分为三部分
import time
import matplotlib.pyplot as plt
class Softmax(object):
def __init__(self):
self.learning_step = 0.00001 # 学习速率
self.max_iteration = 200000 # 最大迭代次数
self.weight_lambda = 0.01 # 衰退权重
def compute_wx(self, x, l):
'''计算单个样本x与第l组权重(参数)的乘积'''
theta_l = self.w[l]
product = np.dot(theta_l, x)
return math.exp(product)
def compute_probability(self, x, j):
'''计算样本x属于类别j的概率'''
# molecule分子;denominator分母
molecule = self.compute_wx(x, j)
denominator = sum([self.compute_wx(x, i) for i in range(self.k)])
return 1.0 * molecule / denominator
def compute_partial_derivative(self, x, y, j):
'''计算代价函数关于第j组权重(参数)的偏导和梯