快速入门Python机器学习(32)

简介: 快速入门Python机器学习(32)

13神经网络


13.1 历史


年代

英文名

中文名

发明人

1943

M-P (McCulloch-Pitts neuron,MCP)

脑神经元的抽象模型

美国神经解剖学家沃伦麦克洛奇(Warren McCulloch)

神经网络和数学家沃尔特皮茨(Walter Pitts)

1958 

第一个感知机学习法则


计算机科学家弗兰克罗森布拉特(Frank Rossenblatt)

1969 

出版preceptron的一书

感知机的弱点

计算机领域的大牛马文明斯基(Marvin Minsky)

1979

Back propagationBP

反向传播算法

杰弗瑞欣顿(Geoffery Hinton)" 神经网络之父 "


Multilayer PreceptronMLP

多层感知器



13.2人工智能、机器学习与深度学习的关系

image.png


13.3 神经网络概念

image.png

脑神经元的抽象模型,被称为M-P 模型(McCulloch-Pitts neuron,MCP):1943年,美国神经解剖学家沃伦麦克洛奇(Warren McCulloch)神经网络和数学家沃尔特皮茨(Walter Pitts)。

兴奋:1

抑制:0

人脑神经活动4个步骤:

  1. 外部刺激通过神经末梢转为电信号,传到神经元细胞
  2. 无数神经元构成神经中枢
  3. 神经中枢综合各种信号做出判断
  4. 把神经中枢的指令发送到人体各个部分,对外部刺激做出反应

image.png


线性模型的一般公式:

image.png = wk1x1 + wk2x2 + + wknxn + bk

image.png

image.png


隐藏层的个数叫深度

隐藏层1

h11 = x1image.png+ x2image.png+ x3image.png+ x4image.png

h12 = x1image.png+ x2image.png+ x3image.png+ x4image.png

h13 = x1image.png+ x2image.png+ x3image.png+ x4image.png


隐藏层2

h21 = h11image.png+ h12image.png+ h13image.png

h22 = h11image.png+ h12image.png+ h13image.png

h23 = h11image.png+ h12image.png+ h13image.png


输出:

y = h21+h22+h23

image.png

image.png


13.4 矫正方法(Rectifying)

  • identity :对样本不做处理,f(x)=x
  • logistic (回归分析) : f(x)=1/[1+exp(−x)]
  • tanh (双曲正切处理) : tangent hyperbolic)
  • relu (非线性矫正) :rectified linear unit) 默认

image.png

tanh:把值压缩到[-1.1]

relu: 把小于0的x去掉,用0代替


13.5 神经网络分类

13.5.1类、参数、属性和方法


class sklearn.neural_network.MLPClassifier(hidden_layer_sizes=100, activation='relu', *, solver='adam', alpha=0.0001, batch_size='auto', learning_rate='constant', learning_rate_init=0.001, power_t=0.5, max_iter=200, shuffle=True, random_state=None, tol=0.0001, verbose=False, warm_start=False, momentum=0.9, nesterovs_momentum=True, early_stopping=False, validation_fraction=0.1, beta_1=0.9, beta_2=0.999, epsilon=1e-08, n_iter_no_change=10, max_fun=15000)


参数

参数

解释

hidden_layer_sizes

tuple, length = n_layers - 2, default=(100,) ith元素表示ith隐藏层中的神经元数量。

solver

{'lbfgs', 'sgd', 'adam'}, default='adam'重量优化求解器。

'lbfgs'是拟牛顿方法家族中的优化器。

'sgd'指随机梯度下降。

'adam'指的是由金马、迪德里克和吉米巴提出的基于梯度的随机优化器注意:就训练时间和验证分数而言,默认解算器'adam'在相对较大的数据集(有数千个或更多的训练样本)上工作得相当好。然而,对于小数据集,'lbfgs'可以更快地收敛,性能更好。

alpha

float, default=0.0001L2惩罚(正则项)参数。

activation

{'identity', 'logistic', 'tanh', 'relu'}, default='relu'隐藏层的激活功能。

'identity',无操作激活,用于实现线性瓶颈,返回f(x) = x

'logistic',即logistic sigmoid函数,返回f(x) = 1 / (1 + exp(-x))

'tanh',双曲tan函数,返回f(x) = tanh(x)

'relu'是已校正的线性单位函数,返回f(x) = max(0x)


属性

属性

类别

介绍

classes_

ndarray or list of ndarray of shape (n_classes,)

每个输出的类别标签。

loss_

float

用损失函数计算的当前损失。

best_loss_

float

求解器在整个拟合过程中达到的最小损失。

loss_curve_

list of shape (n_iter_,)

列表中的ith元素表示第ith次迭代的损失。

t_

int

求解器在拟合过程中看到的训练样本数。

coefs_

list of shape (n_layers - 1,)

列表中的ith元素表示对应于层I的权重矩阵。

intercepts_

list of shape (n_layers - 1,)

列表中的ith元素表示对应于层i + 1的偏置向量。

n_iter_

int

求解器已运行的迭代次数。

n_layers_

int

层数。

n_outputs_

int

输出数量。

out_activation_

str

输出激活函数的名称。


方法

fit(X, y)

将模型与数据矩阵X和目标y相匹配。

get_params([deep])

获取此估计器的参数。

predict(X)

使用多层感知器模型进行预测。

score(X, y[, sample_weight])

返回预测的决定系数R2

set_params(**params)

设置此估计器的参数。


12.5.2神经网络分类算法

def My_MLPClassifier(solver,hidden_layer_sizes,activation,level,alpha,mydata,title):
    warnings.filterwarnings("ignore")
    myutil = util()
    X,y = mydata.data,mydata.target
    X1 = X[:,:2]
    X_train,X_test,y_train,y_test = train_test_split(X, y, random_state=0)
    mlp = MLPClassifier(solver=solver,hidden_layer_sizes=hidden_layer_sizes,activation=activation,alpha=alpha,max_iter=10000)
    mlp.fit(X_train,y_train)
    mytitle = "MLPClassifier("+title+"):solver:"+solver+",node:"+str(hidden_layer_sizes)+",activation:"+activation+",level="+str(level)+",alpha="+str(alpha)
    myutil.print_scores(mlp,X_train,y_train,X_test,y_test,mytitle)
    myutil.plot_learning_curve(MLPClassifier(solver=solver,hidden_layer_sizes=hidden_layer_sizes,activation=activation,alpha=alpha,max_iter=10000),X,y,mytitle)
    myutil.show_pic(mytitle)
    mlp = MLPClassifier(solver=solver,hidden_layer_sizes=hidden_layer_sizes,activation=activation,alpha=alpha,max_iter=10000).fit(X1,y)
    myutil.draw_scatter_for_clf(X1,y,mlp,mytitle)
def MLPClassifier_base():
    mydatas = [datasets.load_iris(), datasets.load_wine(), datasets.load_breast_cancer()]
    titles = ["鸢尾花数据","红酒数据","乳腺癌数据"]
    for (mydata,title) in zip(mydatas, titles):
        ten = [10]
        hundred = [100]
        two_ten = [10,10]
        Parameters = [['lbfgs',hundred,'relu',1,0.0001],['lbfgs',ten,'relu',1,0.0001],['lbfgs',two_ten,'relu',2,0.0001],['lbfgs',two_ten,'tanh',2,0.0001],['lbfgs',two_ten,'tanh',2,1]]
        for Parameter in Parameters:
                 My_MLPClassifier(Parameter[0],Parameter[1],Parameter[2],Parameter[3],Parameter[4],mydata,title)


输出

MLPClassifier(鸢尾花数据):solver:lbfgs,node:[100],activation:relu,level=1,alpha=0.0001:
100.00%
MLPClassifier(鸢尾花数据):solver:lbfgs,node:[100],activation:relu,level=1,alpha=0.0001:
97.37%
MLPClassifier(鸢尾花数据):solver:lbfgs,node:[10],activation:relu,level=1,alpha=0.0001:
100.00%
MLPClassifier(鸢尾花数据):solver:lbfgs,node:[10],activation:relu,level=1,alpha=0.0001:
94.74%
MLPClassifier(鸢尾花数据):solver:lbfgs,node:[10, 10],activation:relu,level=2,alpha=0.0001:
100.00%
MLPClassifier(鸢尾花数据):solver:lbfgs,node:[10, 10],activation:relu,level=2,alpha=0.0001:
97.37%
MLPClassifier(鸢尾花数据):solver:lbfgs,node:[10, 10],activation:tanh,level=2,alpha=0.0001:
100.00%
MLPClassifier(鸢尾花数据):solver:lbfgs,node:[10, 10],activation:tanh,level=2,alpha=0.0001:
97.37% 
MLPClassifier(鸢尾花数据):solver:lbfgs,node:[10, 10],activation:tanh,level=2,alpha=1:
99.11%
MLPClassifier(鸢尾花数据):solver:lbfgs,node:[10, 10],activation:tanh,level=2,alpha=1:
97.37%
MLPClassifier(红酒数据):solver:lbfgs,node:[100],activation:relu,level=1,alpha=0.0001:
99.25%
MLPClassifier(红酒数据):solver:lbfgs,node:[100],activation:relu,level=1,alpha=0.0001:
93.33%
MLPClassifier(红酒数据):solver:lbfgs,node:[10],activation:relu,level=1,alpha=0.0001:
100.00%
MLPClassifier(红酒数据):solver:lbfgs,node:[10],activation:relu,level=1,alpha=0.0001:
91.11%
MLPClassifier(红酒数据):solver:lbfgs,node:[10, 10],activation:relu,level=2,alpha=0.0001:
30.08%
MLPClassifier(红酒数据):solver:lbfgs,node:[10, 10],activation:relu,level=2,alpha=0.0001:
24.44%
MLPClassifier(红酒数据):solver:lbfgs,node:[10, 10],activation:tanh,level=2,alpha=0.0001:
75.19%
MLPClassifier(红酒数据):solver:lbfgs,node:[10, 10],activation:tanh,level=2,alpha=0.0001:
71.11%
MLPClassifier(红酒数据):solver:lbfgs,node:[10, 10],activation:tanh,level=2,alpha=1:
100.00%
MLPClassifier(红酒数据):solver:lbfgs,node:[10, 10],activation:tanh,level=2,alpha=1:
93.33%
MLPClassifier(乳腺癌数据):solver:lbfgs,node:[100],activation:relu,level=1,alpha=0.0001:
96.48%
MLPClassifier(乳腺癌数据):solver:lbfgs,node:[100],activation:relu,level=1,alpha=0.0001:
95.80%
MLPClassifier(乳腺癌数据):solver:lbfgs,node:[10],activation:relu,level=1,alpha=0.0001:
62.68%
MLPClassifier(乳腺癌数据):solver:lbfgs,node:[10],activation:relu,level=1,alpha=0.0001:
62.94%
MLPClassifier(乳腺癌数据):solver:lbfgs,node:[10, 10],activation:relu,level=2,alpha=0.0001:
62.68%
MLPClassifier(乳腺癌数据):solver:lbfgs,node:[10, 10],activation:relu,level=2,alpha=0.0001:
62.94%
MLPClassifier(乳腺癌数据):solver:lbfgs,node:[10, 10],activation:tanh,level=2,alpha=0.0001:
96.24%
MLPClassifier(乳腺癌数据):solver:lbfgs,node:[10, 10],activation:tanh,level=2,alpha=0.0001:
92.31%
MLPClassifier(乳腺癌数据):solver:lbfgs,node:[10, 10],activation:tanh,level=2,alpha=1:
99.53%
MLPClassifier(乳腺癌数据):solver:lbfgs,node:[10, 10],activation:tanh,level=2,alpha=1:
95.80%


数据

solver

node

activation

level

alpha

训练得分

测试得分

鸢尾花

lbfgs

[100]

relu

1

0.0001

100.00%

97.37%

lbfgs

[10]

relu

1

0.0001

100.00%

94.74%

lbfgs

[10,10]

relu

2

0.0001

100.00%

97.37%

lbfgs

[10,10]

tanh

2

0.0001

100.00%

97.37%

lbfgs

[10,10]

tanh

2

1

99.11%

97.37%

红酒

lbfgs

[100]

relu

1

0.0001

99.25%

93.33%

lbfgs

[10]

relu

1

0.0001

100.00%

91.11%

lbfgs

[10,10]

relu

2

0.0001

30.08%

24.44%

lbfgs

[10,10]

tanh

2

0.0001

75.19%

71.11%

lbfgs

[10,10]

tanh

2

1

100.00%

93.33%

乳腺癌

lbfgs

[100]

relu

1

0.0001

96.48%

95.80%

lbfgs

[10]

relu

1

0.0001

62.68%

62.94%

lbfgs

[10,10]

relu

2

0.0001

62.68%

62.94%

lbfgs

[10,10]

tanh

2

0.0001

96.24%

92.31%

lbfgs

[10,10]

tanh

2

1

99.53%

95.80%

image.png

image.png

image.png

image.png

image.png



image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png  

image.png

image.png

image.png


12.5.3案例:手写识别

from PIL import Image
def writeing():
    minist = datasets.fetch_openml('mnist_784')
    print("样本数量{},样本特征数:{}".format(minist.data.shape[0],minist.data.shape[1]))
    X = minist.data/255
    y = minist.target
    # 10000训练样本, 5000测试样本
    X_train,X_test,y_train,y_test = train_test_split(X, y, train_size=10000,test_size=5000,random_state=62)
    #隐藏层为2层,每层500节点
    mlp = MLPClassifier(solver='lbfgs',hidden_layer_sizes=[500,500],activation='tanh',alpha=1e-5,random_state=62)
    mlp.fit(X_train,y_train)
    print("测试集得分:{:.2%}".format(mlp.score(X_test,y_test)))
     image = Image.open('4.png').convert('F')
     image.resize((28,28))
     arr=[]
     for i in range(28):
           for j in range(28):
piexl = 1.0-float(image.getpixel((j,i)))/255.
                 arr.append(piexl)     
                 arr1 = np.array(arr).reshape(1,-1)
                 print('图片中的数字是:{}'.format(mlp.predict(arr1)[0]))
       # 进行图像识别
       plt.imshow(image)
       plt.show()
       print('图片中的数字是:{}'.format(mlp.predict(arr1)[0]))


输出

样本数量70000,样本特征数:784
测试集得分:95.16%
图片中的数字是:4

image.png

目录
相关文章
|
2天前
|
机器学习/深度学习 算法 数据挖掘
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享-2
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
24 1
|
1天前
|
机器学习/深度学习 算法 搜索推荐
Python用机器学习算法进行因果推断与增量、增益模型Uplift Modeling智能营销模型
Python用机器学习算法进行因果推断与增量、增益模型Uplift Modeling智能营销模型
28 12
|
7天前
|
机器学习/深度学习 数据可视化 数据挖掘
《Python 简易速速上手小册》第9章:数据科学和机器学习入门(2024 最新版)
《Python 简易速速上手小册》第9章:数据科学和机器学习入门(2024 最新版)
19 1
|
7天前
|
机器学习/深度学习 存储 算法
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化
30 7
|
9天前
|
机器学习/深度学习 人工智能 分布式计算
R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析
R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析
14 0
|
1月前
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
|
22天前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
1月前
|
机器学习/深度学习 算法 数据可视化
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
27 1
|
1月前
|
机器学习/深度学习 数据采集 算法
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
110 0
|
1月前
|
机器学习/深度学习 数据采集 监控
机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?
机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?
69 0

热门文章

最新文章