机器学习之sklearn(一)neural

it2022-05-05  115

sklearn

sklearn是机器学习中经常用到的一个库,库中含有大量的训练数据集以及大部分经典机器学习算法的封装,我们直接在Python中导入库中需要使用的文件即可。

neural_network

neural_network是sklearn库中的一个分文件,用于神经网络模型的训练。

代码部分

调库部分

# 这里我们使用手写数字识别来举例 # 手写数字识别的数据结构为:每个样本是28*28个像素点,每个像素点属于一个样本特征,取值为0-255之间 # 首先我们要导入科学计算库,用于一些科学计算 import numpy as np # 为numpy起一个别名,调用使用起来会很方便 # 现在导入神经网络中的一个多分类模型,用于训练多分类数据 from sklearn.neural_network import MLPClassifier # 现在导入sklearn中的用于评测预测结果指标的库,如混淆矩阵和分类报告 from sklearn.metrics import confusion_matrix,classification_report

数据读取和处理部分

# 以txt文本数据为例,我们用numpy读取文本数据到整个程序中,以逗号分隔 X_data = np.loadtxt(r'imagesData.txt',delimiter=',') # r表示后续字符串原样输出,不进行转义 y_data = np.loadtxt(r'labelsData.txt',delimiter=',') # 定义数据预处理函数 def preprocess(X,y): # 对数据的处理我通常会都放入这个函数中,下面将列出部分处理步骤,根据实际情况进行处理 # 数据提取 # 特征缩放 X_min = np.min(X) X_max = np.max(X) X = (X - X_min) / (X_max - X_min) # 数据初始化 X = np.c_[np.ones(len(X)),X] y = np.c_[y] # 数据洗牌 np.random.seed(1) m = len(X) o = np.random.permutation(m) X = X[o] y = y[o] # 数据切割 d = int(0.7 * m) X_train,X_test = np.split(X,[d]) y_train,y_test = np.split(y,[d]) # 数据处理基本完毕,返回处理好的数据 return X_train,X_test,y_train,y_test # 调用数据处理函数,获得处理好的数据 X_train,X_test,y_train,y_test = preprocess(X_data,y_data)

调用模型

""" 主要参数: hidden_layer_sizes: 隐藏层单元数(tuple),如(100,100,100,50) activation : 激活函数,{‘identity’, ‘logistic’, ‘tanh’, ‘relu’}, 缺省 ‘relu‘; [f(x) = x, 1/(1+exp(-x)), tanh(x), max(0, x)] solver : 解决器, {‘lbfgs’, ‘sgd’, ‘adam’}, 缺省 ‘adam’; [牛顿法,随机梯度下降, 自适应momemtum] alpha : L2正则化参数,float, 可选,缺省0.0001 batch_size : 批次,可选, 不适用于’lbfgs’, 缺省 ‘auto‘, 此时,batch_size=min(200, n_samples)` learning_rate : 学习率, {‘constant’, ‘invscaling’, ‘adaptive’}, 缺省 ‘constant’, 只适用于梯度下降sgd learning_rate_init : 学习率初始值, 可选, 缺省 0.001, 仅适用于sgd或adam power_t : 下降指数, 可选, 缺省 0.5, 适用于’invscaling’,learning_rate_init/pow(t,power_t), 仅适用于sgd max_iter : 最大迭代数, 可选, 缺省200, 迭代器收敛迭代次数,对于sgd/adam, 代表的是epochs数目,不是下降步数 shuffle : 每次迭代, 是否洗牌, 可选, 缺省True,仅适用于sgd或adam random_state: 缺省None; 若int, 随机数产生器seed, 若RandomStates实例, 随机数产生器, 若None, np.random tol : 容忍度, 可选, 缺省le-4, 连续两次迭代loss达不到此值,除非设置成’adaptive’,否则,就停止迭代, beta_1 : adam指数衰减参数1,可选, 缺省0.9 beta_2 : adam指数衰减参数2,可选, 缺省0.999 epsilon : adam数值稳定值,可选,缺省1e-8 """ # 首先,创建一个多分类模型对象 类似于Java的类调用 # 括号中填写多个参数,如果不写,则使用默认值,我们一般要构建隐层结构,调试正则化参数,设置最大迭代次数 mlp = MLPClassifier(hidden_layer_sizes=(400,100),alpha=0.01,max_iter=300) # 调用fit函数就可以进行模型训练,一般的调用模型函数的训练方法都是fit() mlp.fit(X_train,y_train.ravel()) # 这里y值需要注意,还原成一维数组 # 模型就这样训练好了,而后我们可以调用多种函数来获取训练好的参数 # 比如获取准确率 print('训练集的准确率是:',mlp.score(X_train,y_train)) # 比如输出当前的代价值 print('训练集的代价值是:',mlp.loss_) # 比如输出每个theta的权重 print('训练集的权重值是:',mlp.coefs_)

混淆矩阵和分类报告

# 混淆矩阵和分类报告是评价预测值和真实值的一种指标 # 混淆矩阵可以直观的看出分类中正确的个数和分错的个数,以及将正确的样本错误地分到了哪个类别 matrix_train = confusion_matrix(y_train,mlp,predict(X_train)) print('训练集的混淆矩阵是:',matrix_train) # 分类报告中有多个指标用于评价预测的好坏。 ''' TP: 预测为1(Positive),实际也为1(Truth-预测对了) TN: 预测为0(Negative),实际也为0(Truth-预测对了) FP: 预测为1(Positive),实际为0(False-预测错了) FN: 预测为0(Negative),实际为1(False-预测错了) ''' report_train = classification_report(y_train,mlp.predict(X_train)) print('训练集的分类报告是:'report_train)

最新回复(0)