Python高级编程 课件 第10讲 人工智能编程_第1页
Python高级编程 课件 第10讲 人工智能编程_第2页
Python高级编程 课件 第10讲 人工智能编程_第3页
Python高级编程 课件 第10讲 人工智能编程_第4页
Python高级编程 课件 第10讲 人工智能编程_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

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

文档简介

第10讲Python与人工智能编程深圳北理莫斯科大学:姜增如第10讲主讲内容2Python在AI中的关键库3

Python的AI项目开发流程1人工智能编程技术4AI项目开发案例一、人工智能编程技术

人工智能编程技术是用于开发、部署和优化AI的系统,通过算法实现、框架的使用,让机器具备感知、决策、学习的能力。Python语言是机器学习、深度学习的首选,它拥有NumPy、Pandas、Scikit-learn、TensorFlow、Keras等大量模块库,适用数据预处理、模型训练。其中:数据预处理:使用NumPy(数值计算)、Pandas(数据结构与分析)处理缺失值、异常值、数据标准化/归一化。数据可视化:通过Matplotlib、Seaborn、Plotly将数据转化为图表,辅助特征分析和模型验证。机器学习:使用Scikit-learn框架,通过经典算法,理解模型原理,编写包括预测与回归、分类预测、

聚类与分群、智能推荐系统(电商、视频平台)等系统。深度学习:使用TensorFlow/PyTorch框架,学习模型部署、性能优化,参与实际项目或开源项目,编写包括计算机视觉的人脸识别、自动驾驶视觉感知;自然语言处理的智能客服、机器翻译、大模型应用开发等系统。

1、机器学习编程算法

机器学习是人工智能(AI)的核心分支,主要分为监督学习、无监督学习和强化学习三大范式。其中监督学习是入门和工业界最常用的方向,经典算法涵盖线性回归、逻辑回归、决策树、随机森林、支持向量机(SVM)等,这些算法均可通过Scikit-learn库快速调用,并支持参数调优以适配不同项目。(1)线性回归:核心逻辑是用线性方程拟合输入特征与连续标签的关系进行房价预测、温度预测、销量预测、能源消耗预测等,常通过模块sklearn.linear_model.LinearRegression编程实现。(2)逻辑回归:核心逻辑常用Sigmoid函数将线性输出映射到0-1区间,实现二分类,适合信用风控(是否逾期)、疾病筛查(是否患病)等,常通过模块sklearn.linear_model.LogisticRegression编程实现。(3)决策树:核心逻辑以“特征分割”为核心,构建树状决策规则(如“面积>100㎡→房价>200万”);其优点决策简单,能看懂决策逻辑,无需特征标准化,常通过sklearn.tree.DecisionTreeClassifier/Regressor编程实现。(4)随机森林:核心逻辑:集成多个决策树(“森林”),用投票/平均降低过拟合风险,具有稳定性强、泛化能力好特点,适用大部分分类/回归场景,常使用sklearn.ensemble.RandomForestClassifier/Regressor,编程实现。(5)支持向量机(SVM):核心逻辑:找“最优超平面”分隔不同类别,支持非线性核函数处理复杂数据,具有对小样本处理效果好,泛化能力强的特点,常使用sklearn.svm.SVC/SVR编程实现。2、机器学习解决的问题

机器学习是从数据中学习规律,替代或辅助人工完成难以解决的任务,主要覆盖:(1)

预测与回归问题(连续类别输出)

根据线性回归算法,对已知数据预测一个连续的数值,构建输入特征与连续标签之间的数学映射关系。包括:房价预测、温度预测、商品销量预测、股票价格趋势预测等,工业领域:设备能耗预测、生产良率预测、故障发生时间预测;(2)

分类问题(离散类别输出)

根据逻辑回归、决策树、随机森林、SVM算法,学习不同类别数据的特征模式,对新数据进行类别判断。将数据划分到预先定义的离散类别中。包括:二分类(垃圾/正常;患病/健康;欺诈/正常)、多分类:图像分类(猫狗兔识别)、文本分类(新闻分体育/财经/娱乐)、手写数字识别(0-9分类)。(3)聚类与分群问题(无标签数据分组)

根据K-Means算法,通过无标注数据,自动发现数据内部的隐藏结构,将相似数据归为一类,解决基于数据特征的相似度划分问题。(4)

降维与特征提取问题(高维数据简化)面对高维度数据(如图像像素、多维度用户特征),在保留核心信息的前提下减少特征数量,降低计算成本和过拟合风险。通过将高维空间的数据映射到低维空间,解决保留数据的关键特征问题,这在图像压缩、人脸识别中的特征提取中非常有用。(5)自然语言处理、图像处理问题基于用户行为数据,实现情感分析、文本摘要、机器翻译、关键词提取;包括对于图像理解的目标检测、图像分割、人脸识别问题。3、深度学习算法编程框架

深度学习是机器学习的进阶方向,专注于处理复杂数据(图像、语音、文本),核心是神经网络,通过主流框架TensorFlow/Keras、PyTorch,使用CNN(卷积神经网络)实现图像分类、目标检测、图像分割;使用RNN、Transformer实现文本分类、机器翻译,结合图像、文本、语音数据的融合模型开发。其中:(1)TensorFlow/Keras作为高层API,采用静态计算图+动态图,封装了大量预定义层和工具,无需手动定义前向传播,适合快速原型开发和工程落地。(2)PyTorch采用动态计算图,支持实时调试,是目前深度学习编程的主流选择,核心组件包括Dataset/Dataloader(数据处理)、nn.Module(模型定义)、optim(优化器)、nn.functional(损失/激活函数)。4、深度学习编程核心(1)数据预处理核心原则:归一化/标准化:将数据缩放到小范围(如0-1或均值0方差1),避免因特征尺度差异导致模型收敛慢;(2)数据增强:针对图像/语音等数据,通过旋转、翻转、裁剪、加噪声等方式扩充数据集,有效防止过拟合(PyTorch用torchvision.transforms,Keras用tf.keras.preprocessing.image.ImageDataGenerator);(3)批处理:将数据分成小批次训练,平衡训练速度和梯度稳定性(常用批次大小:32、64、128,根据显存调整);5、模型构建与优化技巧(1)激活函数选择:隐藏层优先用ReLU(避免梯度消失),输出层分类用Softmax、回归用线性激活、二分类用Sigmoid;(2)防止过拟合的核心方法:数据增强(最有效);正则化(L1/L2、Dropout层:随机失活部分神经元,PyTorchnn.Dropout,Keraslayers.Dropout(0.2-0.5));早停(EarlyStopping:监控验证集损失,不再下降则停止训练,Kerastf.keras.callbacks.EarlyStopping);批量归一化(BatchNorm:加速收敛+防止过拟合,PyTorchnn.BatchNorm2d,Keraslayers.BatchNormalization);网络结构设计:简单任务用MLP,图像用CNN,序列数据(文本/语音)用RNN/LSTM/Transformer,复杂任务用预训练模型微调(TransferLearning)。6、训练过程调优优化器选择:优先用Adam(自适应学习率,无需手动调整),其次SGD+动量(SGD(lr=0.01,momentum=0.9),lr为随机梯度下降优化器学习率,0.9为动量系数);学习率调度:固定学习率易陷入局部最优,可采用学习率衰减(如阶梯衰减、余弦退火,PyTorchtorch.optim.lr_scheduler,Kerastf.keras.callbacks.ReduceLROnPlateau);设备利用:优先使用GPU训练(单卡/多卡),PyTorch通过to(device)、TensorFlow自动检测GPU,大幅提升训练速度;梯度裁剪:针对RNN等易出现梯度爆炸的模型,通过裁剪梯度范数稳定训练(PyTorchtorch.nn.utils.clip_grad_norm_)。7、深度学习的应用

深度学习本质是

数据驱动的特征学习方法,其优势在于处理高维度、非结构化数据(图像、文本、语音),可用于计算机视觉(图像分类、目标检测与分割...)、自然语言处理、语音交互、推荐系统、自动驾驶、

生物医药与医疗健康等。1、安装机器学习库/框架及模块方法(1)在Python中安装常用的第三方AI库Scikit-learn方法:安装scikit-learn

库时,一般需要安装处理和分析数据的核心工具numpy

、pandas模块和统计图处理模块seaborn,即:pipinstallscikit-learnpipinstall

numpy

scipy

pipinstallpandaspipinstallseaborn

(2)导入sklearn库及相关模块方法在导入sklearn库时,另外,通用模块通常有约定俗成的别名,如np代表numpy、pd代表pandas等importsklearnimportnumpyasnpimportpandasaspd二、Python在AI中的关键库(3)

导入机器学习库同时导入多个模块的方法使用scikit-learn机器学习编程,常需要导入的多个子模块:例如:导入线性回归模块:fromsklearn.linear_modelimportLinearRegression

例如:导入决策树分类器模块:

fromsklearn.treeimportDecisionTreeClassifier

例如:导入随机森林分类器fromsklearn.ensembleimportRandomForestClassifier

例如:导入支持向量机模块:fromsklearn.svmimportSVC例如:导入数据集拆分模块:

fromsklearn.model_selectionimporttrain_test_split例如:导入评估指标,量化模型的性能准确率

fromsklearn.metricsimportaccuracy_score

例如:导入数据标准化工具fromsklearn.preprocessingimportStandardScaler2、安装深度学习库/框架及模块方法(1)安装Tensorflow库pipinstalltensorflow(2)

安装PyTorch库和计算机视觉工具模块时,为避免导入整个库,常导入具体需要的模块或类,以减少内存占用并提高代码可读性。

pipinstalltorchtorchvision

torchaudio计算机视觉一般需要安装图形处理库Matplotlib即:pipinstall

matplotlib

(3)

安装NLTK自然语言处理基础工具包pipinstall

nltk(4)

导入深度学习库方法importtorchimporttensorflowastf

importnltk

importmatplotlib.pyplotas(5)导入深度学习框架TensorFlow和PyTorch模块的方法fromtensorflow.keras.modelsimportSequentialfromtensorflow.keras.layersimportDensefromtensorflow.keras.layersimportDense,Conv2Dfromtensorflow.keras.optimizersimportAdamimporttorch.nnasnnimporttorch.optimasoptimimporttorch.utils.dataasdataimporttorchvisionfromtorchvisionimporttransformsfromkeras.modelsimportSequentialfromkeras.layersimportDensefromtensorflowimportkerasfromtensorflow.kerasimportlayers(6)Keras是用于构建和训练深度学习模型的高级API,现已深度整合至TensorFlow核心中,导入TensorFlow无需单独安装或导入Keras,直接通过tf.keras即可使用其全部功能。即:

importtensorflowastffromtensorflow.kerasfromtensorflow.keras.optimizersimportAdam#优化器fromtensorflow.keras.lossesimportBinaryCrossentropy#损失函数fromtensorflow.keras.metricsimportAccuracy#评估指标fromtensorflow.keras.utilsimportto_categorical#标签独热编码

(7)导入自然语言处理Transformers模块的方法fromtransformersimportpipelinefromnltk.sentimentimportSentimentIntensityAnalyzer三、Python的ai项目开发流程1、提出问题与目标设定

首先明确项目要解决什么问题,例如:做图像分类(动物分类)、文本情感分析,还是推荐系统?明确量化指标:分类任务看准确率/召回率,回归任务看MAE/RMSE,生成任务看人工评估等。2、数据准备与预处理(AI项目的“原材料”)(1)数据采集:包括公开数据集和自建数据,并对数据进行探索(用pandas查看数据结构、matplotlib/seaborn做可视化分布、相关性),识别异常值、缺失值、数据不平衡问题;(2)数据清洗:缺失值处理、异常值处理、格式标准化;(3)数据预处理:数值特征归一化处理;(4)数据划分:训练集/验证集/测试集拆分;(5)数据增强:图像翻转、文本同义词替换。例如:importpandasaspdfromsklearn.model_selectionimporttrain_test_splitdf=pd.read_csv("data.csv")#读取数据表data.csv3、创建模型/模型选择

传统机器学习模型选择的算法理论和实现都已高度封装在Scikit-learn库中,根据任务类型+数据结构+数据量匹配经典算法即可。例如:实例化随机森林模型(指定超参数,即可完成模型定制)

model=RandomForestClassifier(n_estimators=100,max_depth=5,random_state=42)

其中:n_estimators=树的数量,max_depth=树的深度,random_state=42是用来固定随机数生成器的种子,保证代码每次运行的结果完全一致,

42是一个约定俗成的魔法数字。

深度学习的创建模型/模型选择是先根据任务类型(如图像、文本、生成)选择成熟的网络体系(如CNN、Transformer),再通过“搭建基础网络”或“微调预训练模型”完成定制。例如:针对MNIST手写数字识别任务完成文本二分类,创建线性堆叠的顺序CNN模型。importtensorflowastffromtensorflow.kerasimportlayers,models#模型创建核心:按“卷积层→池化层→展平→全连接层”组合model=models.Sequential([#创建顺序模型#输入层:指定输入维度(28,28,1)(MNIST是单通道灰度图)

layers.Conv2D(32,(3,3),activation='relu',input_shape=(28,28,1)),#卷积层提取特征

layers.MaxPooling2D((2,2)),#池化层压缩特征,减少参数

layers.Conv2D(64,(3,3),activation='relu'),#第二层卷积,提升特征复杂度

layers.MaxPooling2D((2,2)),layers.Flatten(),#展平:将二维特征转为一维,适配全连接层

layers.Dense(64,activation='relu'),#全连接层融合特征

layers.Dense(10,activation='softmax')#输出层:10分类(0-9数字)])4、模型编译模型编译是深度学习中基于TensorFlow/Keras、PyTorch等框架的关键步骤,编译是告诉框架“用什么优化器更新参数”、“用什么指标评估效果”、“用什么损失函数计算误差”,并将模型的计算图绑定到具体的硬件设备(CPU/GPU)上。即:定义学习规则:设置优化器、损失函数和评估指标。TensorFlow/Keras的pile()是最直观的编译实现,例如:model.compile(optimizer=‘adam’,

#优化器:决定参数更新方式

loss='sparse_categorical_crossentropy’,

#损失函数:计算预测误差

metrics=['accuracy’]

#评估指标:衡量模型效果

)或:importtensorflowastffromtensorflow.keras

importlayers,models,optimizers,lossesmodel=models.Sequential([layers.Dense(10,input_shape=(8,))])model.compile(optimizer='adam',loss='mse’)其中:adam表示自适应动量优化,sparse_categorical_crossentropy为分类整数标签。

PyTorch是动态图框架,没有compile()方法,但“编译”的核心逻辑分散在训练流程中,其优化器/损失函数需手动定义并嵌入训练循环。5、

模型训练

完成选择优化器(如分类任务用Adam、SGD)、定义损失函数(分类用交叉熵、回归用MSE)、设置训练轮数,或调用训练模型函数model.fit()监控训练过程,实时查看训练集/验证集的损失、核心指标(准确率、F1-score),判断是否过拟合/欠拟合。例如:调用模型训练函数的方法model.fit(X_train,y_train)#调用训练模型函数y_val_pred=model.predict(X_val)#验证模型print(f"验证集准确率:{accuracy_score(y_val,y_val_pred):.2f}")#输出准确率例如:使用模型训练循环(三步:清零梯度→前向传播→反向传播+参数更新)epochs=5#训练轮数(若是简单任务,5轮足够)train_loss_list=[]#记录训练损失forepochinrange(epochs):model.train()#切换训练模式(启用Dropout/BatchNorm)running_loss=0.0forbatch_idx,(data,target)inenumerate(train_loader):data,target=data.to(device),target.to(device)#数据移到指定设备

optimizer.zero_grad()#清零梯度(避免累积)output=model(data)#前向传播,计算预测值loss=criterion(output,target)#计算损失loss.backward()#反向传播,计算梯度optimizer.step()#优化器更新模型参running_loss+=loss.item()#记录损失

ifbatch_idx%100==0:print(f"Epoch:{epoch+1}/{epochs},Batch:{batch_idx}/{len(train_loader)},Loss:{loss.item():.4f}")avg_train_loss=running_loss/len(train_loader)train_loss_list.append(avg_train_loss)print(f"Epoch{epoch+1}Finished,AverageTrainLoss:{avg_train_loss:.4f}\n")6、模型评估评估核心指标:分类:准确率、精确率、召回率、F1-score、混淆矩阵回归:MAE、MSE、R²;

其中:分类指标:准确率、精确率、召回率、F1-score、混淆矩阵,为衡量模型性能及模型迭代提供量化依据。从中分析错误原因,找出模型预测错误的样本(如把“猫”误判为“狗”),可能存在特征缺失、数据标注错误或模型不足等原因;验证模型是否满足业务指标(如业务要求准确率≥90%,若不满足需回到调优环节)。回归模型的本质是学习输入特征与连续输出之间的数学映射关系,比如用房屋面积、地段、楼层等特征,拟合出一个计算房价的函数。二者指标意义如下:其中(1)混淆矩阵(ConfusionMatrix)含义:以矩阵形式展示模型在每个类别上的预测结果(TP/TN/FP/FN),直观发现模型的误判类型。例如:二分类混淆矩阵(TruePositive):真实是正例真实\预测正类负类正类TP(TruePositive)真实是正例FN(FalseNegative)真实是正例负类FP(FalsePositive)真实是负例TN(TrueNegative)真实是负例例如:生成混淆矩阵fromsklearn.metricsimportconfusion_matriximportseabornassnsimportmatplotlib.pyplotasplty_true=[0,0,0,1,1,1]#0=正常邮件,1=垃圾邮件

y_pred=[0,0,1,1,1,0]#预测结果cm=confusion_matrix(y_true,y_pred)#生成混淆矩阵sns.heatmap(cm,annot=True,fmt="d",cmap="Blues",xticklabels=["正常邮件","垃圾邮件"],

yticklabels=["正常邮件","垃圾邮件"])

plt.xlabel("预测标签")

plt.ylabel("真实标签")plt.show()

模型评估解决过拟合/欠拟合:过拟合(训练集准、验证集差):加正则化(L1/L2)、Dropout层、限制树深度、增加数据;欠拟合(训练集/验证集都差):增加模型复杂度(比如更多决策树、更深的神经网络)、优化特征工程。用测试集评估模型,避免“过拟合误导”。例如:fromsklearn.metricsimportaccuracy_score,classification_report#用测试集预测

y_pred=best_model.predict(X_test)#计算准确率print(f“测试集准确率:{accuracy_score(y_test,y_pred):.2f}”)#书精确率、召回率、F1)print(classification_report(y_test,y_pred))7、模型预测

预测的目标完全由任务类型决定,核心任务是将训练好的模型应用到新数据上,输出符合业务需求的预测结果,并保证预测过程的准确性、稳定性和易用性。预测重点包括:分类任务(离散目标):预测输入数据所属的类别标签,将概率最大的索引映射为类别名称。例如:图像分类(猫/狗)、垃圾邮件识别、情感分析(正面/负面)。预测输出:二分类:单个概率值(如0.9→

正类)。多分类:类别概率分布+最终标签。8、模型调优

模型调优是提升模型性能(精度、泛化能力、收敛速度)的核心环节,本质是解决欠拟合和过拟合问题,同时优化训练效率。调优需遵循“数据优先→模型结构→训练策略→推理优化”的优先级原则进行。(1)通过每次调整一个超参数(调整网络深度和宽度、添加正则化层、修改激活函数)进行迭代试错,观察指标变化。例如:正则化:Dropout层:防止过拟合,推荐值0.2~0.5(PyTorchnn.Dropout(0.3),Keraslayers.Dropout(0.3))修改激活函数:输出层:分类用Softmax,二分类用Sigmoid,回归用线性激活。(2)修改优化器、选择不同学习率调度、调整损失函数重新训练(3)早停机制,即:当指标连续N轮不再提升时,停止训练,保存最优模型,避免过拟合。四、AI项目开发案例领域典型项目场景常用技术核心难点计算机视觉图像分类、目标检测(如交通违章识别)、图像分割(如医疗影像病灶标注)、人脸识别CNN、YOLO、U-Net、Transformer(ViT)数据标注成本高、小样本泛化、遮挡/复杂环境下的精度自然语言处理文本分类、机器翻译、智能问答、文本生成(如文案创作)RNN、LSTM、Transformer(BERT、GPT)语义歧义、多语言适配、低资源语言模型训练推荐系统电商商品推荐、短视频推荐、新闻资讯推荐协同过滤、FM模型、深度学习推荐模型(DeepFM)冷启动(新用户/新商品)、避免推荐同质化金融科技风控反欺诈、信用评估、量化交易、智能投顾逻辑回归、XGBoost、深度学习模型模型可解释性、数据合规、对抗样本攻击医疗健康疾病影像识别、药物研发、电子病历分析、个性化治疗方案CNN、Transformer、图神经网络医疗数据隐私保护、小样本学习、临床验证智能制造设备故障预测、产品缺陷检测、生产流程优化机器学习(SVM、随机森林)、LSTM工业数据噪声大、设备异构性、实时性要求高自动驾驶环境感知(车道线检测、障碍物识别)、路径规划多模态融合模型、强化学习极端天气适应性、安全冗余设计、法规限制机器学习/深度学习AI项目的典型应用领域包括:【例1】模拟生成一个邮件样本CSV文件,编程实现垃圾邮件识别部分数据一个CSV样本文件已生成!email_idemail_textis_spam0email_1邮件内容0工作通知01email_2邮件内容1工作通知12email_3邮件内容2已经中奖03email_4邮件内容3工作通知04email_5邮件内容4已经中奖05email_6邮件内容5工作通知06email_7邮件内容6已经中奖07email_8邮件内容7工作通知08email_9邮件内容8工作通知09email_10邮件内容9工作通知0importpandasaspd

importnumpyasnp

fromdatetimeimportdatetime,timedelta

email_ids=[f"email_{i}"foriinrange(1,101)]

email_text=[f"邮件内容{i}{'已经中奖'ifnp.random.random()>0.5else'工作通知'}"foriinrange(100)]

is_spam=np.random.choice([0,1],100,p=[0.7,0.3])#30%垃圾邮件

df=pd.DataFrame({"email_id":email_ids,"email_text":email_text,"is_spam":is_spam})

df.to_csv("email_data.csv",index=False,encoding="utf-8")

print("一个CSV样本文件已生成!")

print(df.head(10))importpandasaspd

fromsklearn.feature_extraction.textimportTfidfVectorizer

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.linear_modelimportLogisticRegression

fromsklearn.metricsimportclassification_report,accuracy_score,confusion_matrix

#========1.加载数据集===========

df=pd.read_csv("email_data.csv",encoding="utf-8")

print(f"数据集基本信息:")

print(f"数据集形状:{df.shape}")

print(f"垃圾邮件数量:{df['is_spam'].sum()}")

print(f"正常邮件数量:{len(df)-df['is_spam'].sum()}")

#========2.文本特征提取===========

#使用TF-IDF将文本转换为数值特征(适合文本分类的经典方法)

tfidf=TfidfVectorizer(analyzer='char',ngram_range=(1,2))#1-2个字符的组合

X=tfidf.fit_transform(df['email_text'])#文本特征矩阵

y=df['is_spam']#标签(0=正常,1=垃圾)

#========3.划分训练集和测试集========

X_train,X_test,y_train,y_test=train_test_split(#按7:3比例划分,设置随机种子保证结果可复现

X,y,test_size=0.3,random_state=42,stratify=y)#stratify保证训练/测试集的垃圾邮件比例一致

#========4.训练分类模型=============

model=LogisticRegression(random_state=42)#使用逻辑回归

model.fit(X_train,y_train)

#========5.模型评估================

y_pred=model.predict(X_test)

print("===模型评估结果===")

print(f"准确率(Accuracy):{accuracy_score(y_test,y_pred):.4f}")

print("分类报告(精确率/召回率/F1值):")

print(classification_report(y_test,y_pred,target_names=['正常邮件','垃圾邮件']))

print("混淆矩阵:")

cm=confusion_matrix(y_test,y_pred)

cm_df=pd.DataFrame(cm,index=['实际正常','实际垃圾'],columns=['预测正常','预测垃圾'])

print(cm_df)

#=========6.新邮件预测=============

print("===新邮件预测示例===")

new_emails=["邮件内容101:恭喜你中奖10000元,请点击链接领取","邮件内容102:关于下周项目评审的工作通知,请准时参加",

"邮件内容103:中奖信息,速来领取你的专属奖金"]

new_X=tfidf.transform(new_emails)#转换为特征并预测

predictions=model.predict(new_X)

predict_proba=model.predict_proba(new_X)#预测概率

foremail,pred,probinzip(new_emails,predictions,predict_proba):

label="垃圾邮件"ifpred==1else"正常邮件"

spam_prob=prob[1]#垃圾邮件的概率

print(f"邮件内容:{email}")#输出预测结果

print(f"预测结果:{label}(垃圾邮件概率:{spam_prob:.4f})")数据集基本信息:数据集形状:(100,3)垃圾邮件数量:36正常邮件数量:64===模型评估结果===准确率(Accuracy):0.6667分类报告(精确率/召回率/F1值):precisionrecallf1-scoresupport正常邮件0.661.000.7919垃圾邮件1.000.090.1711accuracy0.6730macroavg0.830.550.4830weightedavg0.780.670.5630混淆矩阵:预测正常预测垃圾实际正常190实际垃圾101===新邮件预测示例===邮件内容:邮件内容101:恭喜你中奖10000元,请点击链接领取预测结果:垃圾邮件(垃圾邮件概率:0.5008)邮件内容:邮件内容102:关于下周项目评审的工作通知,请准时参加预测结果:正常邮件(垃圾邮件概率:0.3974)邮件内容:邮件内容103:中奖信息,速来领取你的专属奖金预测结果:正常邮件(垃圾邮件概率:0.4583)结果:importpandasaspd

importnumpyasnp

fromdatetimeimportdatetime,timedelta

fromsklearn.clusterimportKMeans

fromsklearn.preprocessingimportStandardScaler

#1-生成消费数据集(包括:食品,服饰,数码,家居)

user_ids=[f"user_{i}"foriinrange(1,101)]

consume_dates=[(datetime.now()-timedelta(days=np.random.randint(0,30))).date()for_inrange(100)]

consume_amount=np.random.uniform(10,1000,100)

consume_category=np.random.choice(["食品","服饰","数码","家居"],100)

#构建DataFrame

df=pd.DataFrame({"user_id":user_ids,"consume_date":consume_dates,

"consume_amount":consume_amount,"consume_category":consume_category})

#2-数据预处理:将日期转为"消费天数前"(数值特征,方便聚类)

df['consume_date']=pd.to_datetime(df['consume_date'])

df['days_ago']=(pd.Timestamp.now()-df['consume_date']).dt.days

#df['days_ago']=(pd.Timestamp.now().date()-df['consume_date']).apply(lambdax:x.days)

#df['days_ago']=(datetime.now().date()-df['consume_date']).dt.days

print("数据集前5行:")

print(df.head())

【例2】生成一个用户消费数据集,编程实现用户消费分群#按特征:消费金额+消费天数前分群

feature_cols=['consume_amount','days_ago']

X=df[feature_cols].copy()

scaler=StandardScaler()#标准化

X_scaled=scaler.fit_transform(X)

k=4#K-Means聚类(选择4个群,适合100条数据)

kmeans=KMeans(n_clusters=k,random_state=42,n_init=10)

df['cluster_label']=kmeans.fit_predict(X_scaled)

print("\n===各分群数量分布===")

cluster_count=df['cluster_label'].value_counts().sort_index()

forcluster,countincluster_count.items():

print(f"分群{cluster}:{count}个用户(占比{count/len(df)*100:.1f}%)")

print("\n===各分群核心特征(均值)===")

cluster_profile=df.groupby('cluster_label').agg({

'consume_amount':'mean',#平均消费金额

'days_ago':'mean',#平均消费天数前

'consume_category':lambdax:x.mode()[0]#最偏好的消费品类

}).round(2)

print(cluster_profile)数据集前5行:user_idconsume_dateconsume_amountconsume_categorydays_ago0user_12026-01-05602.075563数码191user_22026-01-02236.256108服饰222user_32026-01-22405.437866食品23user_42026-01-04395.738788家居204user_52026-01-08174.997360数码16===各分群数量分布===分群0:32个用户(占比32.0%)分群1:25个用户(占比25.0%)分群2:32个用户(占比32.0%)分群3:11个用户(占比11.0%)===各分群核心特征(均值)===consume_amountdays_agoconsume_categorycluster_label0290.866.56数码1222.1022.40数码2743.5319.62家居3854.164.45服饰结果:【例3】根据5套房屋面积、卧室数量和价格的模拟数据,输入一个全新的房屋数据(面积和卧室数量),根据机器学习sklearn库,使用model.predict()方法来预测其价格并输出均方误差。importnumpyasnp

fromsklearn.linear_modelimportLinearRegression

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.metricsimportmean_squared_error

#1.准备数据

X=np.array([[100,2],[150,3],[200,4],[250,3],[300,5]])#5套房屋面积,卧室数

y=np.array([30,45,60,70,90])#5套房屋价格(万)

#划分训练集和测试集

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)

#2.模型选择(选择一个线性回归模型)model=LinearRegression()

#3.模型训练model.fit(X_train,y_train)

#4.评估模型

y_pred=model.predict(X_test)

mse=mean_squared_error(y_test,y_pred)

print(f"均方误差(MSE):{mse:.2f}")

#5预测新数据

new_house=np.array([[180,3]])#面积180,3个卧室

predicted_price=model.predict(new_house)

print(f"预测价格:{predicted_price[0]:.2f}万")均方误差(MSE):0.03预测价格:52.74万结果:【例4】根据模拟生成的房屋样本文件house_price.csv,包括house_id,area,floor,build_year,price模拟的100条数据,输入一个全新的房屋数据,根据机器学习sklearn库,预测其价格并输出均方误差。房屋数据集已生成:house_price.csv数据集前10行:

house_idareafloorbuild_yearprice0house_1119.9392015950711.951house_2107.23302025875762.962house_3122.9552015980358.023house_4140.46120241120474.074house_5105.32192019840405.235house_6105.32102016834973.266house_7141.581220011117224.607house_8125.35242000989251.958house_9100.61152015804534.479house_10120.85272011974124.29importpandasaspd

importnumpyasnp

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.preprocessingimportStandardScaler

fromsklearn.ensembleimportRandomForestRegressor

fromsklearn.metricsimportmean_squared_error

#1_模拟生成房屋数据集并保存为CSV

np.random.seed(42)#固定随机种子,结果可复现

house_ids=[f"house_{i}"foriinrange(1,101)]

area=np.clip(np.random.normal(110,20,100),80,150)#80-150平(正态分布均值110,标准差20)

floor=np.random.randint(1,31,100)

#楼层:1-30层(均匀分布)

build_year=np.random.randint(2000,2027,100)

#2000-2026年

#价格:基于面积/楼层/年份生成(核心逻辑:面积主导,新楼/高楼层更贵)

#基础公式:价格=面积*8000+楼层*500-(2026-build_year)*1000+随机噪声

price=area*8000+floor*500-(2026-build_year)*1000+np.random.normal(0,5000,100)

price=np.clip(price,800000,2000000)#限制价格范围80-200万

house_df=pd.DataFrame({"house_id":house_ids,"area":area.round(2),"floor":floor,

"build_year":build_year,"price":price.round(2)})#构建DataFrame并保存为CSV

house_df.to_csv("house_price.csv",index=False,encoding="utf-8")

print("✅房屋数据集已生成:house_price.csv")

print("数据集前10行:")

print(house_df.head(10))

#2-加载CSV文件数据并预处理

df=pd.read_csv("house_price.csv",encoding="utf-8")

feature_cols=["area","floor","build_year"]

X=df[feature_cols]#特征矩阵(面积、楼层、建造年份)

y=df["price"]#预测目标(房价)

#划分训练集/测试集(7:3)

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42)

scaler=StandardScaler()

X_train_scaled=scaler.fit_transform(X_train)

X_test_scaled=scaler.transform(X_test)

#3-选择随机森林回归训练房价预测模型

model=RandomForestRegressor(n_estimators=100,random_state=42)

model.fit(X_train_scaled,y_train)

#4-评估

y_pred=model.predict(X_test_scaled)

mse=mean_squared_error(y_test,y_pred)#计算均方误差(MSE)和均方根误差(RMSE)

rmse=np.sqrt(mse)

print("\n===模型评估结果===")

print(f"测试集均方误差(MSE):{mse:.2f}")

print(f"测试集均方根误差(RMSE):{rmse:.2f}元")#RMSE表示预测值与真实值的平均误差

print(f"平均房价:{y_test.mean():.2f}元")

print(f"误差占比:{(rmse/y_test.mean())*100:.2f}%")

print("\n===新房屋数据价格预测===")

#5-预测新房屋数据(示例:面积120平,15楼,2010年建造)

new_house={"area":120.0,"floor":15,"build_year":2016}

new_house_df=pd.DataFrame([new_house])#转换为模型可接受的格式

new_house_scaled=scaler.transform(new_house_df)

new_price_pred=model.predict(new_house_scaled)[0]

print(f"新房屋信息:{new_house}")

print(f"预测价格:{new_price_pred:.2f}元")===模型评估结果===测试集均方误差(MSE):100859253.82测试集均方根误差(RMSE):10042.87元平均房价:885774.24元误差占比:1.13%===新房屋数据价格预测===新房屋信息:{'area':120.0,'floor':15,'build_year':2016}预测价格:953979.60元结果:【例5】依据机器学习中经典鸢尾花数据集(由150个样本组成,每个样本都包含了鸢尾花花萼(sepal)和花瓣(petal)的长度与宽度这四个数值特征,以及它所属的类别(类别Setosa(山鸢尾),Versicolor(杂色鸢尾),Virginica(弗吉尼亚鸢尾))。要求:(1)输出鸢尾花数据集的数据;(2)使用scikit-learn的决策树进行评估准确率;(3)添加一个新样本,预测其类别并测试类别概率;(4)创建一个散点图矩阵,展示所有特征之间的关系。importseabornassns

importnumpyasnp

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.treeimportDecisionTreeClassifier

fromsklearn.datasetsimportload_iris

fromsklearn.metricsimportaccuracy_score

importmatplotlib.pyplotasplt

#1、加载鸢尾花数据集并预处理数据iris1=sns.load_dataset('iris')

iris=load_iris()

target_names=iris.target_names#目标类别名称

X,y=iris.data,iris.target

print("数据集的键:",iris.keys())#打印数据集的描述

#print("\n数据集描述:\n",iris['DESCR'])#打印特征名称

print("\n特征名称:",iris.feature_names)#打印物种名称

print("物种名称:",target_names)

print("类别分布:",np.bincount(y))print("\n前45-55个样本的特征数据:")

print(iris.data[45:55])#打印前10行数据

print("\n前45-55个样本的类别标签:,0(Setosa),1(Versicolor),2(Virginica)")

print(iris.target[45:55])#打印前5个类别标签

#划分训练集和测试集7:3,X_train,X_test,y_train,y_test表示训练和测试集的特征和标签

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42)

print(f"训练集大小:{X_train.shape[0]}")

print(f"测试集大小:{X_test.shape[0]}")

#2、创建模型

model=DecisionTreeClassifier()#决策树分类器模型

#3、训练模型

model.fit(X_train,y_train)#表示测试集的特征和标签

#4、模型评估与预测-在测试集上做预测

predictions=model.predict(X_test)#对训练好的模型进行预测

#5、评估准确率

accuracy=accuracy_score(y_test,predictions)#评估该模型预测与测试集的比(准确率)

print(f"模型的准确率是:{accuracy:.2f}")#输出

#6、使用模型预测新样本(花萼长5.1cm,宽3.5cm,花瓣长1.4cm,宽0.2cm)

new_sample=np.array([[5.1,3.5,1.4,0.2]])

prediction=model.predict(new_sample)

prediction_proba=model.predict_proba(new_sample)

print(f"\n新样本预测结果:{target_names[prediction[0]]}")

print("预测概率:")

fori,probinenumerate(prediction_proba[0]):#输出预测类别概率

print(f"{target_names[i]}:{prob:.4f}")

sns.pairplot(iris1,hue='species',palette='viridis')#创建一个散点图矩阵,展示所有特征之间的关系

plt.suptitle('鸢尾花数据集特征散点图',y=1.02)#设置图表标题

plt.show()

其鸢尾花数据集特征散点图如图10-3所示。数据集的键:dict_keys(['data','target','frame','target_names','DESCR','feature_names','filename','data_module'])特征

温馨提示

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

评论

0/150

提交评论