计算机基础与应用简明教程(人工智能版)课件 第8章 人工智能_第1页
计算机基础与应用简明教程(人工智能版)课件 第8章 人工智能_第2页
计算机基础与应用简明教程(人工智能版)课件 第8章 人工智能_第3页
计算机基础与应用简明教程(人工智能版)课件 第8章 人工智能_第4页
计算机基础与应用简明教程(人工智能版)课件 第8章 人工智能_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章人工智能教学目标熟悉人工智能基本概念和发展学派理解机器学习基本方法初步理解深度学习与人工神经网络理解大模型等人工智能概念8.1人工智能的基本概念8.1.1人工智能的定义AI是模拟、延伸人类智能的科学技术发展历程:初期阶段→知识时代→特征时代→数据时代核心问题:定义与算法8.1人工智能的基本概念8.1.2图灵测试通过文字问答判断机器是否具备人类智能2014年"尤金·古兹曼"首次通过测试8.1人工智能的基本概念8.1.3人工智能的发展与学派符号主义学派:基于逻辑推理(如专家系统)行为主义学派:强调环境交互(如控制论机器人)连接主义学派:仿生神经网络(如深度学习)8.2机器学习8.2.1机器学习的概念流程:数据预处理→模型训练→评价优化工具:scikit-learn(分类、回归、聚类等)8.2机器学习8.2.2机器学习的基本方法有监督学习:分类(KNN、SVM)、回归(线性回归)无监督学习:聚类(K-Means)、降维(PCA)案例:药用植物分类、血糖预测、数据聚类与可视化某药用植物由于原产地不同,药性有所差异。在“药材.csv”文件中记录了原产地分别为A(分类代码0)、B(分类代码1)和C(分类代码2)的药用植物叶片数据,包括叶长、叶宽、叶尖长和叶柄长数据(单位cm),局部数据如图所示。用sklearn进行分类建模。

①引用机器学习工具包并读入数据。importnumpyasnpimportpandasaspdfilename='./药材.csv'data=pd.read_csv(filename)X=data.iloc[1:,:-1] #数据集习惯上用大写形式,不含标题行,前4列数据y=data.iloc[1:,-1] #标签习惯上用小写形式,不含标题行,最后一列为标签列②划分数据。将已知数据分成2组:训练集(60%)和测试集(40%)。fromsklearn.model_selectionimporttrain_test_splitX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.4)③训练建模。使用训练集来构建相关特征的模型。fromsklearn.neighborsimportKNeighborsClassifierclf=KNeighborsClassifier(n_neighbors=3)clf.fit(X_train,y_train)④验证调优。使用测试集来验证模型的表现,通过调整参数或使用更多的特征来提升算法的性能。准确率(Accuracy)用预测结果中正确预测的数量与样本总数的比值表示。y_train_pred=clf.predict(X_train)y_test_pred=clf.predict(X_test)#预测模型的准确率importsklearn.metricsprint('训练集',sklearn.metrics.accuracy_score(y_train,y_train_pred))print('测试集',sklearn.metrics.accuracy_score(y_test,y_test_pred))当n_neighbors=3时,预测模型的准确率如下:训练集0.9775280898876404测试集0.9333333333333333当n_neighbors=7时,预测模型的准确率如下:训练集0.9775280898876404测试集1.0⑤应用预测。使用训练好的模型对未知数据进行预测。预测药用植物叶片的叶长、叶宽、叶尖长和叶柄长数据分别为4.5、1.5、0.1、3.1的原产地。注意X_n的数据结构,即使只有一条测试记录也要用二维列表(双重方括号)。#未知数据X_n=[[4.5,1.5,0.1,3.1]]y_n=clf.predict(X_n)print('预测未知数据属于标签',y_n)输出结果如下:预测未知数据属于标签[0]可知预测样本属于原产地A。临床研究发现,空腹血糖值与血液总胆固醇和甘油三酯两项独立指标具有线性关系。“血糖数据.xlsx”文件中有135例临床数据,局部数据如图8-3所示。用sklearn进行线性回归建模。①引用机器学习工具包并读入数据。importnumpyasnpimportpandasaspdfilename='血糖数据.xlsx'data=pd.read_excel(filename)X=data.iloc[1:,:2].values.astype(float) #自变量,大写,不含标题行,前2列数据y=data.iloc[1:,2].values.astype(float)#因变量,小写,不含标题行②划分数据。将已知数据分成2组:随机划分训练集(90%)和测试集(10%)。fromsklearnimportmodel_selectionX_train,X_test,y_train,y_test=model_selection.train_test_split(X,y,test_size=0.1,random_state=1)③训练建模。使用训练集来构建相关特征的模型。fromsklearn.linear_modelimportLinearRegressionlinregTr=LinearRegression()linregTr.fit(X_train,y_train)#输出线性回归模型的截距和回归系数print(linregTercept_,linregTr.coef_)输出结果如下:5.133088271911451[0.200307010.32663484]即线性回归模型可近似表达为多元线性方程y=0.200X0+0.327X1+5.133。④验证调优。使用测试集来验证模型的性能。利用sklearn的metrics类中提供的r2_score、mean_squared_error和mean_absolute_error方法分别计算决定系数R2、均方误差MSE和平均绝对误差MAE。fromsklearnimportmetricsy_train_pred=linregTr.predict(X_train)y_test_pred=linregTr.predict(X_test)train_mse=metrics.mean_squared_error(y_train,y_train_pred)test_mse=metrics.mean_squared_error(y_test,y_test_pred)print('在训练集和测试集上的均方误差分别为:{:.2f}和{:.2f}'.format(train_mse,test_mse))train_mae=metrics.mean_absolute_error(y_train,y_train_pred)test_mae=metrics.mean_absolute_error(y_test,y_test_pred)print('在训练集和测试集上的平均绝对误差分别为:{:.2f}和{:.2f}'.format(train_mae,test_mae))predict_score=linregTr.score(X_test,y_test)print('用回归模型自带方法计算决定系数为:{:.2f}'.format(predict_score))predict_r2_score=metrics.r2_score(y_test,y_test_pred)print('用metrics类方法计算决定系数为:{:.2f}'.format(predict_r2_score))输出结果如下:在训练集和测试集上的均方误差分别为:0.08和0.04在训练集和测试集上的平均绝对误差分别为:0.21和0.16用回归模型自带方法计算决定系数为:0.80用metrics类方法计算决定系数为:0.80⑤可视化输出结果。使用matplotlib.pyplot对所划分的测试集进行可视化结果比较,如图所示,其中虚线为模型预测结果,实线为临床血样真实结果。importmatplotlib.pyplotaspltplt.plot(range(len(y_test_pred)),y_test_pred,'g--',label='y_test_pred')plt.plot(range(len(y_test)),y_test,'r',label='y_test')plt.show()

⑥应用预测。使用训练好的模型对未知数据做预测。某患者血液总胆固醇和甘油三酯数据分别为8.9和2.3,预测其空腹血糖。注意X_n的数据结构,即使只有一条测试记录也要用二维列表(双重方括号)。#未知数据X_n=[[8.9,2.3]]y_n=linregTr.predict(X_n)print('预测未知数据空腹血糖为',y_n)输出结果如下:预测未知数据空腹血糖为[7.6670808]图测试集的模型预测结果与临床血样真实结果比较用sklearn机器学习聚类方法将下列6个数据点聚类:[1,2],[1.5,1.8],[3.5,2.8],[4.6,3.8],[1,0.6],[3.3,4.2],并预测[1.4,1.2]和[3.6,3.9]两个数据点所属的分类标签。importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.clusterimportKMeansX=np.array([[1,2],[1.5,1.8],[3.5,2.8],[4.6,3.8],[1,0.6],[3.3,4.2]])clf=KMeans(n_clusters=2)clf.fit(X)centers=clf.cluster_centers_ #两组数据点的中心点labels=clf.labels_ #每个数据点所属的分类标签print('两组的中心点在:\n',centers)print('各数据点所属分类标签:\n',labels)foriinrange(len(labels)):plt.scatter(X[i][0],X[i][1],c=('r'iflabels[i]==0else'b'))plt.scatter(centers[:,0],centers[:,1],marker='v',s=100)#预测predict=[[1.4,1.2],[3.6,3.9]]label=clf.predict(predict)foriinrange(len(label)):plt.scatter(predict[i][0],predict[i][1],c=('r'iflabel[i]==0else'b'),marker='x')

plt.show()输出结果如下:两组的中心点在:

[[3.83.6][1.166666671.46666667]]各数据点所属分类标签:

[110010]8.3深度学习与人工神经网络8.3.1神经网络的基本概念结构:输入层→隐藏层→输出层激活函数:ReLU、Sigmoid、tanh训练过程:前向传播→损失计算→反向传播8.3.2卷积神经网络(CNN)核心组件:卷积层→池化层→全连接层应用:图像识别(MNIST手写数字分类)框架:TensorFlow/Keras实现模型构建与训练(1)加载相关库和数据集,配置模型参数。设定每批次128张图像,将60000张训练集图像分469批次进行训练;设定每批次32张图像(默认),将10000张测试集图像分313批次进行测试。importtensorflowastffromtensorflow.keras.datasetsimportmnistfromtensorflow.keras.modelsimportSequentialfromtensorflow.keras.layersimportDense,Flatten,Conv2D,MaxPool2Dfromtensorflow.keras.utilsimportto_categoricalimportnumpyasnpimportmatplotlib.pyplotaspltimportmatplotlib.imageasmpimg#配置学习率、批次大小、迭代次数等参数learning_rate=0.001batch_size=128#每批次训练图像数epochs=10#加载MNIST数据集(需联网下载)(x_train,y_train),(x_test,y_test)=mnist.load_data()(2)数据预处理。利用reshape函数将二维图像(28×28像素)转换为一维序列(784像素),然后将像素0~255的灰度值归一化,对分类维度,将标签转换为0~9的分类格式。x_train=x_train.reshape(x_train.shape[0],28,28,1)/255.0#整形成适合卷积网络的输入x_test=x_test.reshape(x_test.shape[0],28,28,1)/255.0y_train=to_categorical(y_train,num_classes=10)#将标签转换为分类格式y_test=to_categorical(y_test,num_classes=10)(3)构建Sequential神经网络模型。输入层采用Conv2D二维卷积层,共28×28=784个神经元(一维序列输入),使用32个3×3的卷积核。然后依次连接2×2的MaxPool2D池化层、64核的Conv2D二维卷积层和2×2的MaxPool2D池化层,以Flatten展平层转换后连接128个神经元的Dense全连接层。其均以ReLU作为激活函数。最后连接10个神经元的Dense输出层,以softmax函数归一化得到10个数字的概率分布。model=Sequential([Conv2D(32,kernel_size=(3,3),activation='relu',input_shape=(28,28,1)),#32个3×3的卷积核

MaxPool2D(pool_size=(2,2)), #2×2的池化层

Conv2D(64,kernel_size=(3,3),activation='relu'),#64个3×3的卷积核

MaxPool2D(pool_size=(2,2)), #2×2的池化层

Flatten(),#展平层,在卷积层和全连接层中间起转换作用

Dense(128,activation='relu'), #全连接层

Dense(10,activation='softmax') #输出层])(4)模型编译。使用Adam优化器,每步均输出损失函数和准确率用于模型评估。pile(optimizer=tf.keras.optimizers.Adam(learning_rate=learning_rate),loss='categorical_crossentropy',metrics=['accuracy'])(5)训练模型。迭代次数达到预定epochs时结束训练。model.fit(x_train,y_train,batch_size=batch_size,epochs=epochs,validation_data=(x_test,y_test))(6)评估模型。训练和测试的部分输出结果如图所示。test_loss,test_acc=model.evaluate(x_test,y_test)print(f'测试集准确度:{test_acc}')(7)可视化测试。测试结果如图所示。images=x_testlabels=y_testnum_rows=2#展示4个测试图像,2行2列num_cols=2prediction_labels=np.argmax(model.predict(images),axis=1)fig,axs=plt.subplots(num_rows,num_cols,figsize=(2,2))foriinrange(num_rows*num_cols):row=i//num_colscol=i%num_colsaxs[row,col].imshow(images[i].reshape(28,28),cmap='Greys')axs[row,col].set_title(f"Label:{labels[i]},Prediction:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论