神经网络模块 simple_ml.neural_network

反向传播网络 (BP Network)

from simple_ml.base.base_model import BaseClassifier
from simple_ml.base.base_enum import ActiveFunction, CostFunction


class NeuralNetwork(BaseClassifier):

    __doc__ = "BP Neural Network"
    
    def __init__(self, alpha=0.5, threshold=None, iter_times=100, 
            output_neuron_num=1, output_active_func=ActiveFunction.sigmoid, 
            cost_func=CostFunction.logistic):
        pass

NeuralNetwork模型通过反向传播(BP)算法估计参数,可以随意添加隐含层

当前支持:

神经元激活函数支持:

神经网络损失函数支持:


1.1 初始化

  名称 类型 描述
Parameters: alpha float 梯度下降更新步长
  threshold float, (0,1) 分类阈值,大于等于该值为1,否则为0,如果默认None,则采用SvsS方法确定阈值
  iter_times int 反向传播迭代次数
  output_neuron_num int 输出层神经元个数,如果是二分类就是1
  output_active_func ActiveFunction 输出层激活函数类型
  cost_func cost_func 神经网络损失函数类型

1.2 类方法

1 添加隐含层

def add_layer(self, neuron_num, active_func=ActiveFunction.sigmoid)
  名称 类型 描述
Parameters: neuron_num int 该层神经元个数
  active_func ActiveFunction 激活函数类型
Returns: Void    

2 批量添加隐含层

def add_some_layers(self, layer_num, neuron_num, active_func=ActiveFunction.sigmoid)
  名称 类型 描述
Parameters: neuron_num int 该层神经元个数
  layer_num int 添加隐含层层数
  active_func ActiveFunction 激活函数类型
Returns: Void    

3 清空隐含层

def clear_all(self)

4 拟合

def fit(self, x, y)

拟合特征

  名称 类型 描述
Parameters: x np.2darray 训练集特征
  y np.array 训练集标签
Returns:   Void  

5 预测

def predict(self, x)

给定测试集特征x,进行预测

  名称 类型 描述
Parameters: x np.2darray 测试集特征
Returns:   np.array 预测的结果

6 结果评价

def score(self, x, y)

拟合并进行预测,最后给出预测效果的得分

  名称 类型 描述
Parameters: x np.2darray 测试集特征
  y np.array 测试集标签
Returns:   float 预测结果评分,此处给出F1值

7 分类作图

logistic模块提供了直接绘制分类效果图的方法,如果维度大于2,则通过PCA降至两维

def classify_plot(self, x, y, title="")
  名称 类型 描述
Parameters: x np.2darray 测试集特征
  y np.array 测试集标签
Returns:   Void  

8 概率预测

def predict_prob(self, x)

给定测试集特征x,对其正负类的概率进行预测

  名称 类型 描述
Parameters: x np.2darray 测试集特征
Returns:   np.array(float) 预测的结果,表示为正类(1)的概率

9 ROC曲线绘制

针对二分类且包含 predict_prob方法的模型,我们均给出了ROC曲线的绘制方法auc_plot,并且在图中输出AUC值

def auc_plot(self, x, y)
  名称 类型 描述
Parameters: x np.2darray 测试集特征
  y np.array 测试集标签

1.3 类属性

None

Examples

from simple_ml.classify_data import *
from simple_ml.neural_network import *
from simple_ml.data_handle import train_test_split
from simple_ml.base.base_enum import *


x, y = get_wine()

x = x[(y == 0) | (y == 1)]
y = y[(y == 0) | (y == 1)]

x_train, y_train, x_test, y_test = train_test_split(x, y, 0.3, 918)

nn = NeuralNetwork(alpha=0.5, cost_func=CostFunction.square)
nn.add_some_layers(2, 3, active_func=ActiveFunction.relu)
nn.fit(x_train, y_train)
print(nn.predict_prob(x_test))
nn.classify_plot(x_test, y_test)
nn.auc_plot(x_test, y_test)

返回主页