简书《从零开始用Python搭建超级简单的点击率预估模型》
作者:流川枫AI
链接:https://www.jianshu.com/p/131e6701f7ec

# coding:utf-8
import numpy as np 

class NeuralNetwork(): 
    # 随机初始化权重
    def __init__(self): 
        np.random.seed(1) 
        self.synaptic_weights = 2 * np.random.random((3, 1)) - 1 
    
    # 定义激活函数:这里使用sigmoid
    def sigmoid(self, x):  
        return 1 / (1 + np.exp(-x)) 
    
    #计算Sigmoid函数的偏导数 
    def sigmoid_derivative(self, x): 
        return x * (1 - x)
    
    # 训练模型 
    def train(self, training_inputs, training_outputs,learn_rate, training_iterations): 
        # 迭代训练
        for iteration in range(training_iterations): 
            #前向计算 
            output = self.think(training_inputs) 
            # 计算误差 
            error = training_outputs - output 
            # 反向传播-BP-微调权重 
            adjustments = np.dot(training_inputs.T, error * self.sigmoid_derivative(output)) 
            self.synaptic_weights += learn_rate*adjustments 
    
    def think(self, inputs): 
        # 输入通过网络得到输出 
        # 转化为浮点型数据类型 
        inputs = inputs.astype(float) 
        output = self.sigmoid(np.dot(inputs, self.synaptic_weights)) 
        return output 

if __name__ == "__main__": 
    # 初始化前馈神经网络类 
    neural_network = NeuralNetwork() 
    print "随机初始化的权重矩阵W"
    print neural_network.synaptic_weights
    # 模拟训练数据X
    train_data=[[0,0,1], [1,1,1], [1,0,1], [0,1,1]]
    training_inputs = np.array(train_data) 
    # 模拟训练数据Y
    training_outputs = np.array([[0,1,1,0]]).T 
    # 定义模型的参数:
    # 参数学习率
    learn_rate=0.1
    # 模型迭代的次数
    epoch=150000
    neural_network.train(training_inputs, training_outputs, learn_rate, epoch) 
    print "迭代计算之后权重矩阵W: "
    print neural_network.synaptic_weights
    # 模拟需要预测的数据X
    pre_data=[0,0,1]
    # 使用训练的模型预测该微博被点击的概率
    print "该微博被点击的概率:"
    print neural_network.think(np.array(pre_data))

"""
终端输出的结果:
随机初始化的权重矩阵W
[[-0.16595599]
 [ 0.44064899]
 [-0.99977125]]
迭代计算之后权重矩阵W: 
[[12.41691302]
 [-0.20410552]
 [-6.00463275]]
该微博被点击的概率:
[0.00246122]
[Finished in 20.2s]
"""
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐