发布时间:2024-03-16 09:30:01
在深度学习大热的当下,神经网络算法是最知名、应用最为广泛的机器学习算法。可以毫不夸张地说,你所能接触到的人工智能产品,绝大部分都使用了神经网络算法,比如手机经常用到的刷脸解锁、美颜修图、照片中的人物识别等,都是基于神经网络分类算法实现的。注意:经过长达几十年的积累,直到目前,已经有大量的公开数据集可以使用,比如 Kaggle 数据集、Amazon 数据集、UCI 机器学习资源库、微软数据集等等。
项目 | 说明 |
---|---|
优点 | 网络结构延展性好,能够拟合复杂的数据分布,比如非线性函数,通过调节权值参数来获取泛化能力较强的模型。 |
缺点 | 可解释性差,调参依赖于经验,可能会陷入局部最优解,或者梯度消失、梯度爆炸等问题。 |
应用领域 | 神经网络算法拟合能力强,应用领域广,比如文本分类等,而深度学习作为神经网络的分支,也是当前最为热门研究方向,在图像处理、语言识别和自然语言处理等多个领域都有着非常突出的表现。 |
名称 | 说明 |
---|---|
hidden_layer_sizes | 元组或列表参数,序列内元素的数量表示有多少个隐藏层,每个元素的数值表示该层有多少个神经元节点,比如(10,10),表示两个隐藏层,每层10个神经元节点。 |
activation | 隐藏层激活函数,参数值有 identity、logistic、tanh、relu,默认为 'relu' 即线性整流函数(校正非线性) |
solver | 权重优化算法,lbfgs、sgd、adam,其中 lbfg 鲁棒性较好,但在大型模型或者大型数据集上花费的调优时间会较长,adam 大多数效果都不错,但对数据的缩放相当敏感,sgd 则不常用 |
alpha | L2 正则项参数,比如 alpha = 0.0001(弱正则化) |
learning_rate | 学习率,参数值 constant、invscaling、adaptive |
learning_rate_init | 初始学习率,只有当 solver 为 sgd 或 adam 时才使用。 |
max_iter | 最大迭代次数 |
shuffle | 是否在每次迭代时对样本进行清洗,当 solver 参数值为 sgd 或 adam 时才使用该参数值 |
random_state | 随机数种子 |
tol | 优化算法中止的条件,当迭代先后的函数差值小于等于 tol 时就中止 |
import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.neural_network import MLPClassifier def main(): iris = datasets.load_iris() # 加载鸢尾花数据集 # 用pandas处理数据集 data = pd.DataFrame(iris.data, columns=iris.feature_names) print(iris.feature_names) #数据集标记值 iris.target data['class'] = iris.target # 此处只取两类 0/1 两个类别的鸢尾花,设置类别不等于 2 data = data[data['class'] != 2] # 对数据集进行归一化和标准化处理 scaler = StandardScaler() # 选择两个特征值(属性) X = data[['sepal length (cm)', 'petal length (cm)']] #计算均值和标准差 scaler.fit(X) # 标准化数据集(数据转化) X = scaler.transform(X) # 'class'为列标签,读取100个样本的的列表 Y = data[['class']] # 划分数据集 X_train, X_test, Y_train, Y_test = train_test_split(X, Y) # 创建神经网络分类器 mpl = MLPClassifier(solver='lbfgs', activation='logistic') # 训练神经网络模型 mpl.fit(X_train, Y_train) # 打印模型预测评分 print('Score:\n', mpl.score(X_test, Y_test)) # 划分网格区域 h = 0.02 x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, h),np.arange(y_min, y_max, h)) Z = mpl.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) #画三维等高线图,并对轮廓线进行填充 plt.contourf(xx, yy, Z,cmap='summer') # 绘制散点图 class1_x = X[Y['class'] == 0, 0] class1_y = X[Y['class'] == 0, 1] l1 = plt.scatter(class1_x, class1_y, color='b', label=iris.target_names[0]) class2_x = X[Y['class'] == 1, 0] class2_y = X[Y['class'] == 1, 1] l2 = plt.scatter(class2_x, class2_y, color='r', label=iris.target_names[1]) plt.legend(handles=[l1, l2], loc='best') plt.grid(True) plt.show() main()模型评分为 1.0,即模型预测正确率为 100%,输出效果图如下: