python代码实现支持神经网络对鸢尾花分类

1、导入支持向量机模型,划分数据集

from sklearn import datasets
from sklearn import svm

iris=datasets.load_iris()
iris_x=iris.data
iris_y=iris.target
indices = np.random.permutation(len(iris_x))
iris_x_train = iris_x[indices[:-10]]
iris_y_train = iris_y[indices[:-10]]
iris_x_test = iris_x[indices[-10:]]
iris_y_test = iris_y[indices[-10:]]

2、训练模型

clf = MLPClassifier(solver='lbfgs', alpha=1e-5,
hidden_layer_sizes=(5, 2), random_state=1)
clf.fit(iris_x_train,iris_y_train)

#hidden_layer_sizes,它用来设置隐藏层大小,长度就是隐藏层的数量。在第一次,我们设置的是 [5,2] 这个数组,这样我们的网络有两层隐藏层,第一层有 5 个神经元,第二层有 2 个神经元。

多层感知器是一种人工神经网络模型,由多个神经网络层组成,其中包括输入层、隐藏层和输出层。MLPClassifier() 可以用于解决分类问题,它具有以下一些重要参数:
hidden_layer_sizes:指定隐藏层的大小和数量。
activation:激活函数,如 ‘logistic’、‘relu’、‘tanh’ 等。
solver:优化算法,如 ‘adam’、‘sgd’ 等。
alpha:L2 正则化参数。
learning_rate:学习率的调整策略,如’constant’、‘adaptive’ 等。
max_iter:最大迭代次数。

3、为测试数据集分类

iris_y_predict = clf.predict(iris_x_test)
score=clf.score(iris_x_test,iris_y_test,sample_weight=None)
print('iris_y_predict = ')
print(iris_y_predict)
print('iris_y_test = ')
print(iris_y_test)
print('Accuracy:',score)
print('layers nums :',clf.n_layers_)
iris_y_predict = 
[2 2 2 2 2 2 2 2 2 2]
iris_y_test = 
[1 1 1 0 0 0 2 1 2 0]
Accuracy: 0.2
layers nums : 4

在第一次输出的时候,可以看到准确率只有 20%,是不是让人大跌眼镜?不要担心,神经网络的重点就在这里,我们接着往下看。

clf = MLPClassifier(solver='lbfgs', alpha=1e-5,
hidden_layer_sizes=(10, 10,10), random_state=1)
clf.fit(iris_x_train,iris_y_train)
iris_y_predict = clf.predict(iris_x_test)
score=clf.score(iris_x_test,iris_y_test,sample_weight=None)
print('iris_y_predict = ')
print(iris_y_predict)
print('iris_y_test = ')
print(iris_y_test)
print('Accuracy:',score)
print('layers nums :',clf.n_layers_)
iris_y_predict = 
[1 2 1 0 0 0 2 1 2 0]
iris_y_test = 
[1 1 1 0 0 0 2 1 2 0]
Accuracy: 0.9
layers nums : 5

第二次输出的时候,对于代码其他部分没有做任何调整,只是对 hidden_layer_sizes 进行了修改,改成了三个隐藏层,每个隐藏层有10 个神经元,这个时候神奇的事情发生了,我们的准确率已经提升到 了 90%。

优点
1、可以不断地扩展模型的边界,而对于内部具体的运行不需要加以太多的干涉。通过不同的搭建手段,神经网络几乎可以去模拟任何算法的结果,只要数据量够多,构建的模型够完善,最终都会有一个很好的结果。

缺点
1、神经网络缺乏可解释性,它的内部纷繁复杂,就像一个神奇的黑匣子,你告诉它数据,然后它告诉你结果,至于为什么会这样,它不做任何解释。所以在很多对解释性要求比较高的场景,比如信用评级、金融风控等情况下没办法使用。
2、神经网络非常消耗资源,不管是数据、网络节点,还是硬件设备,要构建一套完美的神经网络模
型开销是非常大的,不光训练时间长,还需要耗费很大的人力物力。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于Python基于BP神经网络鸢尾花分类问题,我可以给你一些参考。 首先,BP神经网络是一种常见的人工神经网络,它可以用于分类、回归等任务。而鸢尾花是一种常见的分类问题,因此可以用BP神经网络来进行分类。 在Python中,有多个库可以用来实现BP神经网络,例如TensorFlow、Keras、PyTorch等。这里以Keras为例,给出一个基于BP神经网络鸢尾花分类代码: ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from keras.models import Sequential from keras.layers.core import Dense, Activation from keras.optimizers import SGD # 加载数据 iris = load_iris() X = iris.data y = iris.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) # 构建BP神经网络 model = Sequential() model.add(Dense(10, input_dim=4)) model.add(Activation('sigmoid')) model.add(Dense(3)) model.add(Activation('softmax')) # 设置优化器和损失函数 sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True) model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy']) # 训练模型 model.fit(X_train, y_train, epochs=200, batch_size=10) # 在测试集上评估模型 loss, accuracy = model.evaluate(X_test, y_test) print("Test loss:", loss) print("Test accuracy:", accuracy) ``` 这段代码中,先用`load_iris()`方法加载鸢尾花数据集,然后将数据集划分为训练集和测试集。接着,用Keras的`Sequential()`方法构建BP神经网络,并设置优化器和损失函数。最后,用`fit()`方法对模型进行训练,用`evaluate()`方法在测试集上评估模型的性能。 需要注意的是,鸢尾花数据集的输出有3个类别,因此需要使用softmax作为最后一层的激活函数,并使用交叉熵损失函数。此外,还需要将输出进行one-hot编码,以便进行训练和评估。 希望这个例子能对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值