机器学习之sklearn(一)neural_network调库实现

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)
  • 22
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
scikit-learn的神经网络neural_network)库中的径向基函数(rbf)经验网络是一种基于径向基函数的反向传播(radial basis function neural network)的模型。 径向基函数是一种常用的非线性函数,常用于将高维输入映射到低维空间。该函数的形式为:K(x,y) = exp(-gamma*||x-y||^2),其中x和y是向量,gamma是一个参数,||x-y||是x和y之间的欧几里得距离。 在scikit-learn的neural_network库中,径向基函数经验网络(RBF network)是一种多层感知器(MLP)的变种,它的隐藏层单元由径向基函数构成。该模型的结构类似于传统的多层感知器,只是隐藏层的激活函数不再是传统的sigmoid函数或ReLU函数,而是径向基函数。 径向基函数经验网络使用径向基函数作为隐藏层的激活函数,并通过反向传播算法来更新网络的权重和偏置。这种模型的优点是可以处理非线性问题,并且不需要预先对数据进行特征工程。然而,该模型的训练过程相对复杂,需要较大的样本量和计算资源。 在sklearnneural_network库中,可以使用RBF经验网络通过调用RBFRegressor或RBFClassifier类来构建模型。然后,可以使用fit()方法对模型进行训练,使用predict()方法对新的样本进行预测。 总之,sklearnneural_network库中的rbf经网网络是一种基于径向基函数的反向传播神经网络模型,可以用于解决非线性问题,并且不需要进行特征工程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值