大数跨境
0
0

【左手Python右手R】神经网络模型(Neural Network Model)的相关分析及可视化

【左手Python右手R】神经网络模型(Neural Network Model)的相关分析及可视化 医学统计数据分析
2025-02-16
2
导读:【左手Python右手R】神经网络模型(Neural Network Model)的相关分析及可视化
神经网络模型‌

神经网络模型‌是一种模拟人类神经系统的数学模型,广泛应用于人工智能、机器学习和深度学习领域。神经网络由大量的简单处理单元(称为神经元)广泛连接而成,反映了人脑的基本功能特征。神经网络具有自学习、自适应和并行处理的能力,特别适合处理复杂和不精确的信息‌。

神经网络的基本组成

神经网络通常由三个主要部分组成:输入层、隐藏层和输出层。每个神经元通过加权连接与其他神经元相连,每个连接都有一个权重,这些权重在训练过程中通过学习算法进行调整。此外,每个神经元还有一个偏置项,用于避免输出为零的情况‌。

神经网络的基本类型

前馈神经网络‌:信息从输入层向前传播,经过隐藏层,最终到达输出层,没有反馈连接。常见的前馈神经网络包括卷积神经网络(CNN)、全连接神经网络(FCN)和生成对抗网络(GAN)等‌。

‌反馈神经网络‌:神经元不仅可以接收其他神经元的信号,还可以接收自己的反馈信号,具有记忆功能。常见的反馈神经网络包括循环神经网络(RNN)、长短期记忆网络(LSTM)等‌。

神经网络的应用领域

神经网络在多个领域都有广泛应用,包括:

‌系统辨识‌:用于识别系统的动态特性。

‌模式识别‌:如图像和语音识别。

‌智能控制‌:用于自适应控制系统。

‌组合优化‌、金融预测与管理、通信、机器人技术和专家系统等领域‌。




我们仍以Excel示例数据为例,初步展示一下神经网络模型的初步做法,我们先用Rstudio打开示例数据。










‌R语言中的train函数位于caret包中‌。caret包是一个用于构建、训练和评估机器学习模型的R包,提供了丰富的功能来帮助用户进行模型训练和参数调优。train函数是caret包的核心功能之一,用于训练模型,支持多种算法和模型类型‌。我们先用train函数拟合神经网络模型。

set.seed(1234)

nn.model <- train(

  结局 ~ 指标1+指标2+指标3+指标4+指标5+指标6,data = Train,

  method="nnet",

  preProcess=c(center", "scale),

  trControl=trainControl(method="cv", number=10, classProbs=T),

  tuneGrid=expand.grid(size = c(1, 5, 10), decay = c(0, 0.1, 0.01)))

print(nn.model)

plot(nn.model)










neuralnet包

#加载neuralnet包

install.packages("neuralnet") #安装包 

# 加载Rattle图形库

install.packages("RGtk2")

install.packages("rattle")

library(neuralnet)

library(rattle)

rattle_gui()

#拟合并可视化神经网络模型

nnfit <- neuralnet(结局 ~ 指标1+指标2+指标3+指标4+指标5+指标6,data = Train, hidden = 10, threshold = 0.01)

print(nnfit)

plot(nnfit)

summary(nnfit)










#安装并加载nnet包

install.packages("nnet")

library(nnet)

#使用nnet包拟合神经网络模型

nnmodel <- nnet(结局 ~ 指标1+指标2+指标3+指标4+指标5+指标6,data = Train,

                size = 10, decay = 0.01, maxit = 100)

# 输出模型摘要

summary(nnmodel)

plot(nnmodel)










#使用神经网络模型预测测试数据并绘制ROC曲线

nn.pred.prob <- predict(nn.model, newdata=Test)

par(las=1, cex.axis=.8)

nn.roc <- roc(

  y ~ pred,

  data=data.frame(y=Test$结局, pred=nn.pred.prob),

  plot=T, ci=T, main="ROC Curve of Neural Network",

  print.auc=T, print.auc.cex=.8,

  print.thres=T, print.thres.cex=.8,

  auc.polygon=T, max.auc.polygon=T, grid=T)

#计算brier评分

brier(data=nn.pred.prob, reference=Test$结局)









神经网络模型‌

神经网络模型‌是一种基于人工神经元的数学模型,用于模拟人脑的神经网络结构和功能。它由大量的简单处理单元(称为神经元)广泛地互相连接而形成的复杂网络系统,反映了人脑功能的许多基本特征,是一个高度复杂的非线性动力学习系统‌。


神经网络模型的基本原理

神经网络模型的基本原理是模拟人脑神经元的工作方式。人脑由大约860亿个神经元组成,每个神经元通过突触与其他神经元相互连接。神经元接收来自其他神经元的信号,当信号强度超过一定阈值时,神经元会产生输出信号,并通过突触传递给其他神经元。神经网络模型正是基于这种神经元连接和信号传递的机制构建的‌。


应用场景

神经网络模型在许多领域都有广泛的应用,包括:

‌图像识别‌:如面部识别、物体检测等。

‌语音识别‌:如语音转文字、语音命令识别等。

‌自然语言处理‌:如机器翻译、情感分析等。

‌推荐系统‌:如商品推荐、内容推荐等。

‌预测分析‌:如时间序列预测、金融预测等‌。

总之,神经网络模型通过模拟人脑的神经元连接和信号传递机制,实现了对复杂数据的处理和学习,广泛应用于各个领域。




今天我们仍以二分类因变量的示例数据为例,探讨一下神经网络(Neural Network)模型可视化及预测效果的ROC曲线、混淆矩阵评价的Python实现。








#加载程序包(openpyxl和pandas等)

# 使用pandas读取示例数据xlsx文件

import ann_visualizer

import openpyxl

import numpy as np

import pandas as pd

import simpleNomo

import matplotlib.pyplot as plt

from ann_visualizer.visualize import ann_viz

nndata = pd.read_excel(r'C:\Users\L\Desktop\示例数据.xlsx')

# 查看前几行数据

print(nndata .head())

nndata.columns = ['序号','结局','指标1', '指标2', '指标3','指标4','指标5','指标6','指标7','时间','指标8']

import pandas as pd

pd.set_option('display.max_columns', None)

pd.set_option('display.max_rows',None)








# 对导入的实例数据分离特征和目标变量

X = nndata[['指标1', '指标2', '指标3','指标4','指标5','指标6']]

y = nndata[['结局']]

#划分训练集和测试集

from sklearn.model_selection import train_test_split 

# Splitting the data into training and testing sets

X_train,X_test,y_train,y_test=train_test_split(

   X,y,test_size=0.30, random_state=77, stratify=y)

feature=list(X.columns)






#搭建神经网络模型,并训练数据

from sklearn.neural_network import MLPClassifier

from sklearn.metrics import accuracy_score

nnmodel =MLPClassifier()

nnmodel.fit(X_train, y_train)

y_train= nnmodel.predict(X_train)

print("训练集预测值:\n",y_train)








#预测test新数据

y_pred = nnmodel.predict(X_test)

print("测试集预测值:\n",y_pred)

print("神经网络训练模型评分:\n",

    accuracy_score(nnmodel.predict(X_train),y_train))

print("神经网络测试模型评分:\n",

     accuracy_score(nnmodel.predict(X_test),y_test))








#数据标准化

from sklearn.preprocessing import StandardScaler

from sklearn.inspection import permutation_importance

scaler = StandardScaler()

scaler.fit(X_train)

X_train_s = scaler.transform(X_train)

X_test_s = scaler.transform(X_test)

print("训练集:\n",X_train_s)

print("测试集:\n",X_test_s)







# 评估模型

from sklearn.metrics import classification_report, accuracy_score

print("Accuracy:",accuracy_score(y_test,y_pred))

print("Classification Report:\n ", classification_report(y_test,y_pred))








#神经网络模型分析特征权重可视化

import matplotlib.pyplot as plt

plt.figure(figsize=(20,3))

plt.imshow(nnmodel.coefs_[0],interpolation='none', cmap='viridis')

plt.yticks(range(6),feature)

plt.xlabel('Columns in weight matrix')

plt.ylabel('Input feature')

plt.colorbar()

plt.show()

#可以通过调整图表大小,选择合适的显示方式

# 使用Matplotlib绘制MLP结构图

fig, ax = plt.subplots()  # 创建一个图和坐标系

plt.subplots(nnmodel)

# 显示图形

plt.show()















#混淆矩阵评估模型

#导入第三方模块

from sklearn import metrics

# 混淆矩阵

print("混淆矩阵四格表输出如下:")

print(metrics.confusion_matrix(y_test, y_pred, labels = [0, 1]))

Accuracy = metrics._scorer.accuracy_score(y_test, y_pred)

Sensitivity = metrics._scorer.recall_score(y_test, y_pred)

Specificity = metrics._scorer.recall_score(y_test, y_pred, pos_label=0)

print("神经网络模型混淆矩阵评价结果如下:")

print('模型准确率为%.2f%%' %(Accuracy*100))

print('正例覆盖率为%.2f%%' %(Sensitivity*100))

print('负例覆盖率为%.2f%%' %(Specificity*100))








# 使用Seaborn的heatmap绘制混淆矩阵

import matplotlib.pyplot as plt

from sklearn.metrics import confusion_matrix

import seaborn as sns

sns.heatmap(metrics.confusion_matrix(y_test, y_pred), annot=True, fmt='d')

plt.title('Confusion Matrix')

plt.xlabel('Predicted label')

plt.ylabel('True label')

plt.show()








#进行ROC曲线绘制计算准备

# у得分为模型预测正例的概率

y_score =nnmodel.predict_proba(X_test)[:,1]

#计算不同阈值下,fpr和tpr的组合值,其中fpr表示1-Specificity,tpr表示sensitivity

fpr,tpr,threshold =metrics.roc_curve(y_test,y_score)

# 计算AUC的值

roc_auc = metrics.auc(fpr,tpr)

print("神经网络模型预测测试集数据ROC曲线的AUC:",roc_auc)

神经网络模型预测测试集数据ROC曲线的AUC: 0.9423111111111111






#绘制ROC曲线

import matplotlib.pyplot as plt

import seaborn as sns

# 绘制面积图

plt.stackplot(fpr, tpr, color='steelblue', alpha = 0.5,edgecolor = 'black')

# 添加边际线

plt.plot(fpr, tpr, color='black',lw = 1)

# 添加对角线

plt.plot([0,1],[0,1],color ='red',linestyle ='--')

# 添加文本信息

plt.text(0.5,0.3,'Roc curve(area =%.2f)'% roc_auc)

# 添加轴标签

plt.xlabel('1-Specificity')

plt.ylabel('Sensitivity')

# 显示图形

plt.show()








神经网络模型的结构和类型

神经网络模型通常由多个层次组成,包括输入层、隐藏层和输出层。输入层接收外部输入信号,隐藏层负责处理和转换输入信号,输出层生成最终的输出结果。每个神经元都有一定的权重和偏置,权重决定了神经元之间的连接强度,偏置则决定了神经元的激活阈值。通过调整这些权重和偏置,神经网络可以学习输入数据的特征和规律‌。


常见的神经网络类型

包括:

‌前馈神经网络‌:信号只能从前向后传递,常用于分类和回归问题。

‌循环神经网络‌:神经元之间存在反馈连接,常用于处理时间序列数据。

‌卷积神经网络‌:具有卷积层和池化层,适用于图像识别和视频分析。

‌自编码器‌:用于数据降维、特征提取和去噪。

‌生成对抗网络‌:用于生成新的数据样本‌。

激活函数和反向传播算法

在神经网络中,激活函数用于引入非线性,使得神经网络能够处理复杂的模式。常见的激活函数包括Sigmoid、ReLU等。反向传播算法用于在训练过程中调整权重和偏置,通过计算损失函数的梯度来更新参数,以最小化损失函数‌。




医学统计数据分析分享交流SPSS、R语言、Python、ArcGis、Geoda、GraphPad、数据分析图表制作等心得。承接数据分析,论文修回,医学统计,空间分析,问卷分析业务。若有投稿和数据分析代做需求,可以直接联系我,谢谢!




【声明】内容源于网络
0
0
医学统计数据分析
分享交流SPSS、R语言、Python、ArcGis、Geoda、GraphPad、数据分析图表制作等心得。承接数据分析,论文返修,医学统计,空间分析,机器学习,生存分析,时间序列,时空面板,深度学习,问卷分析等业务。公众号右下角可联系作者
内容 323
粉丝 0
医学统计数据分析 分享交流SPSS、R语言、Python、ArcGis、Geoda、GraphPad、数据分析图表制作等心得。承接数据分析,论文返修,医学统计,空间分析,机器学习,生存分析,时间序列,时空面板,深度学习,问卷分析等业务。公众号右下角可联系作者
总阅读32
粉丝0
内容323