尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

基于 Python 的机器学习总结

基于 Python 的机器学习总结 处于数据驱动的时代当中, 机器学习身为人工智能的核心领域部分, 正在深刻地改变着我们去解决问题的方式, 凭借其简洁的语法, 凭借其丰富的库资源, 凭借其强大的生态系统, 成为机器学习领域当中最受欢迎的编程语言之一, 本文将会对基于此的机器学习展开全面总结, 涵盖基础概念部分, 涵盖常用库部分, 也涵盖经典算法以及实践中的关键要点。一、 在机器学习中的优势在机器学习领域大放异彩, 是因为有所谓独特优势。其一, 语法简洁清晰, 新手易于上手, 使得学习门槛降低, 哪怕是没有深厚编程基础之人, 也能够迅速入门机器学习。其二, 具备丰富第三方库, 像Numpy、、、-learn、和等, 这些库差不多涵盖了机器学习从数据处理、分析、可视化到模型构建、训练以及评估的整个流程, 极大地提升了开发效率。另外, 社区呈现出活跃的态势, 存在着数量众多的开源项目、教程以及文档, 当开发者遭遇问题之际, 有可能较为轻易地获取到解决方案, 并且能够交流相关经验。二、机器学习流程概述通常而言, 机器学习项目是会遵循某些特定流程的, 借助某些特定工具, 我们能够富有成效地去完成其中每一个独立环节。数据收集, 要从各类数据源, 像是数据库、文件系统、网络爬虫等获取原始数据, 还提供了丰富的库来达成数据的读取, 譬如它能够轻松读取 CSV、Excel、SQL 等不少格式的数据, 此库能够用于从网页爬取数据, 数据预处理, 原始数据常常存有缺失值、异常值、噪声这类问题, 需要开展预处理。借助相关工具能够便利地处置缺失值, 像是将缺失的行予以去除或者填充缺失数值, 并同时对数据加以清洁处理凭借Numpy能够针对数据实施数值方面的运算以及开展相应的变换调整方面就对应于文本数据而言, 还能够动用NLTK或是spaCy去执行譬如进行分词、确定词性诸如此类的操作行为。从事特征工程就需要从原本初始的数据里提取挑选对于模型训练具备有作用意义能够产生成效可用的特征。比如, 针对数值型特征开展标准化, 也就是-learn里的或者施行归一化处置针对于类别型特征实施独热编码, 是的或者-learn的这种情况而且还能够借助特征选择算法, 像挑选出最为重要的特征, 进而削减数据维度, 以此提升模型性能。 模型进行选择以及训练方面: 依据问题的类型诸如分类、回归、聚类等这类去挑选适宜的机器学习模型。 -learn库给出了众多经典的机器学习模型, 像决策树、随机森林、支持向量机、逻辑回归这类对于深度学习任务而言, 可以运用或者构建神经网络模型。当选择好模型之后, 运用训练数据针对该模型展开训练, 借助调整模型参数的方式去优化模型性能。模型评估方面, 运用测试数据对训练完毕的模型予以评估, 常用的评估指标存在准确率、精确率、召回率、F1 值针对分类任务, 均方误差、平均绝对误差针对于回归任务等。-learn 的模块给出了丰富的评估函数, 便利我们对模型进行客观评价。模型优化与部署环节, 依据评估结果, 对模型实施优化, 比如调整超参数、尝试不一样的模型结构或者算法等。一旦模型性能达成所需标准, 那就会把模型安置到实际运用里头, 从而给业务予以支撑。三、常用库详尽解析。1.Numpy, 它属于科学计算的基础库, 能提供高性能的多维数组对象, 还具备用于对数组进行操作的函数。它在机器学习裡面, 常常被用于数据的存储以及基本的数值计算, 像矩阵运算那个样子, 还有数组切片、广播等操作, 它可是许多其他库的基础呢。import numpy as np # 创建一个一维数组 arr1 np.array([1, 2, 3, 4]) # 创建一个二维数组 arr2 np.array([[1, 2], [3, 4]]) # 数组运算 print(arr1 1) print(arr2 * 2)2.它主要是被用于数据处理以及分析, 它提供了诸如一维数据结构还有二维数据结构等这样的数据结构, 这方便了针对数据去进行读取, 以及清洗, 还有转换, 甚至分析等一系列操作。在机器学习项目当中, 它常常是被用于数据的初步探索以及预处理阶段。import pandas as pd # 读取CSV文件 data pd.read_csv(data.csv) # 查看数据前几行 print(data.head()) # 处理缺失值 data data.dropna()3.成为, 最为常用的绘图库当中的一个, 被用来进行数据可视化。凭借, 我们能够绘制各种各样不同类型的图表, 像折线图、柱状图、散点图这类, 以直观的方式去展示数据的分布以及特征, 进而帮助我们更加良好地理解数据。import matplotlib.pyplot as plt import numpy as np x np.linspace(0, 10, 100) y np.sin(x) plt.plot(x, y) plt.xlabel(x) plt.ylabel(y) plt.title(Sin Function) plt.show()4.–learn, 它属于极为常用的机器学习库范畴之内, 能够提供数量众多的机器学习算法以及工具, 所涉及的范围包含分类这一任务、回归这一任务、聚类这一任务、降维这一任务等等一序列多种机器学习任务, 而且具备统一的API接口, 从而便利使用以及调用。from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.datasets import load_iris from sklearn.metrics import accuracy_score # 加载鸢尾花数据集 iris load_iris() X iris.data y iris.target # 划分训练集和测试集 X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42) # 创建逻辑回归模型 model LogisticRegression() # 训练模型 model.fit(X_train, y_train) # 预测 y_pred model.predict(X_test) # 评估模型 print(Accuracy:, accuracy_score(y_test, y_pred))5.被 发展出来的开源深度学习框架, 给出了强有力的工具以及库, 用来搭建与训练各类深度学习模型, 像神经网络, 卷积神经网络也就是 CNN, 循环神经网络也就是RNN等等。 准许在CPU、GPU上开展运算, 而且能够便捷地部署至不一样的平台。import tensorflow as tf from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Flatten from tensorflow.keras.utils import to_categorical # 加载MNIST数据集 (x_train, y_train), (x_test, y_test) mnist.load_data() # 数据预处理 x_train x_train / 255.0 x_test x_test / 255.0 y_train to_categorical(y_train) y_test to_categorical(y_test) # 创建模型 model Sequential([ Flatten(input_shape(28, 28)), Dense(128, activationrelu), Dense(10, activationsoftmax) ]) # 编译模型 model.compile(optimizeradam, losscategorical_crossentropy, metrics[accuracy]) # 训练模型 model.fit(x_train, y_train, epochs5, batch_size32) # 评估模型 test_loss, test_acc model.evaluate(x_test, y_test) print(Test accuracy:, test_acc) 6.PyTorch是另一个广泛使用的深度学习框架以其动态计算图和简洁的 API 受到开发者的喜爱。PyTorch 在学术界和工业界都有大量的应用特别是在自然语言处理、计算机视觉等领域。 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms # 数据预处理 transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ]) # 加载MNIST数据集 train_dataset datasets.MNIST(data, trainTrue, downloadTrue, transformtransform) test_dataset datasets.MNIST(data, trainFalse, transformtransform) # 创建数据加载器 train_loader torch.utils.data.DataLoader(train_dataset, batch_size64, shuffleTrue) test_loader torch.utils.data.DataLoader(test_dataset, batch_size1000, shuffleFalse) # 定义神经网络模型 class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 nn.Linear(784, 128) self.fc2 nn.Linear(128, 10) def forward(self, x): x x.view(-1, 784) x torch.relu(self.fc1(x)) x self.fc2(x) return x model Net() # 定义损失函数和优化器 criterion nn.CrossEntropyLoss() optimizer optim.SGD(model.parameters(), lr0.01, momentum0.5) # 训练模型 for epoch in range(10): running_loss 0.0 for i, data in enumerate(train_loader, 0): inputs, labels data optimizer.zero_grad() outputs model(inputs) loss criterion(outputs, labels) loss.backward() optimizer.step() running_loss loss.item() print(fEpoch {epoch 1}, Loss: {running_loss / len(train_loader)}) # 评估模型 correct 0 total 0 with torch.no_grad(): for data in test_loader: images, labels data outputs model(images) _, predicted torch.max(outputs.data, 1) total labels.size(0) correct (predicted labels).sum().item() print(fAccuracy of the network on the 10000 test images: {100 * correct / total}%)四、经典机器学习算法1.线性回归, 属于一种监督学习算法, 其用途在于预测数值型目标变量,借助建立自变量与因变量之间的线性关系来开展预测。于其中, -learn的类能够便利地达成线性回归模型。2.有这样一种算法叫逻辑回归 , 叫这个名字 , 虽其中含有“回归”二字 , 但其属于用于分类任务的算法这一类 , 它是通过对线性回归的输出实施逻辑变换做法 , 把输出这个结果映射到0至1这个范围之间 , 借此得出样本归属于某一类别时的概率。3.决策树, 它是一种算法, 这种算法是基于树结构的分类和回归算法, 它要通过对数据进行递归划分, 以此构建树形模型, 其中每个内部节点表示一个特征的判断条件, 每个分支表示一个判断结果, 而叶子节点表示类别或数值预测结果, -learn中的er用于分类任务, r用于回归任务。4.随机森林, 属于一种集成学习算法, 它借助构建多个决策树, 并且把这些决策树的预测结果予以综合, 像投票或者平均那样, 以此来提升模型的泛化能力以及稳定性, 随机森林在分类任务里有广泛应用, 在回归任务中同样有广泛应用。5.支持向量机, 属一种二分类样式, 其基本样式是于特征空间里定义的间隔最大的线性分类器, 支持向量机借助找寻一个最优超平面, 把不同类别的样本尽量分开, 且让间隔最大化, 针对非线性分类问题, 可借由核函数将数据映射到高维空间来实施处理。6.那种比如K - Means聚类这般的聚类算法, 可以是那种针对相关的如那个数据集合实现了簇类进行划分的一种无监督学习算法, 它能够把数据集给划分成K个不一样的簇, 进而促使处于同一个簇里面的数据那一个个点所具备的相似度是比较高的, 然而处于不同簇里面的数据点其相似度却是比较低的。-learn的类是能够去对K - Means聚类算法予以实现的。五、案例展示这呈现而出的是, 一个具备简单特性的机器学习方面的案例, 此案例为鸢尾花数据集的分类, 借助的是 -learn 库, 以此来构造并训练一个逻辑回归模型, 以下所给出, 则是涉及的具体详尽代码, 还有与之对应的解释, 一并呈现的还有运行之后所产生的结果。import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score, classification_report # 1. 加载鸢尾花数据集 iris load_iris() X iris.data # 特征数据 y iris.target # 目标数据 # 2. 划分训练集和测试集 X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.3, random_state42) # 3. 创建并训练逻辑回归模型 model LogisticRegression() model.fit(X_train, y_train) # 4. 进行预测 y_pred model.predict(X_train) train_accuracy accuracy_score(y_train, y_pred) print(f训练集准确率: {train_accuracy}) y_pred model.predict(X_test) test_accuracy accuracy_score(y_test, y_pred) print(f测试集准确率: {test_accuracy}) # 5. 查看分类报告 print(分类报告:) print(classification_report(y_test, y_pred)) # 6. 简单可视化以两个特征为例 # 假设我们只使用前两个特征来可视化 # 提取前两个特征的数据 X_vis X[:, :2] # 划分训练集和测试集 X_vis_train, X_vis_test, y_vis_train, y_vis_test train_test_split(X_vis, y, test_size0.3, random_state42) # 训练一个仅基于前两个特征的逻辑回归模型 model_vis LogisticRegression() model_vis.fit(X_vis_train, y_vis_train) # 生成网格点用于绘制决策边界 h 0.02 x_min, x_max X_vis[:, 0].min() - 1, X_vis[:, 0].max() 1 y_min, y_max X_vis[:, 1].min() - 1, X_vis[:, 1].max() 1 xx, yy np.mgrid[x_min:x_max:h, y_min:y_max:h] grid np.c_[xx.ravel(), yy.ravel()] probs model_vis.predict_proba(grid)[:, 1].reshape(xx.shape) # 绘制决策边界和数据点 plt.contourf(xx, yy, probs, 25, cmapRdBu, alpha0.8) plt.scatter(X_vis[:, 0], X_vis[:, 1], cy, edgecolorsk, cmapRdBu) plt.xlim(x_min, x_max) plt.ylim(y_min, y_max) plt.xlabel(iris.feature_names[0]) plt.ylabel(iris.feature_names[1]) plt.title(鸢尾花数据集分类结果可视化) plt.show()代码解释调用函数去加载鸢尾花数据集, 加载之后, X成为特征数据部分, y成为目标数据部分。运用函数把数据集划分成训练集与测试集, 划分时指定测试集的比例, 通过指定比例来确保结果具备可重复性。构建模型并利用训练集数据开展训练。分别于训练集以及测试集上开展预测, 预测之后计算准确率。借助t函数生成分类报告, 该报告用于展示精确率、召回率以及F1值等指标。通过可视化, 为了能够以更直观的方式去理解模型的分类效果, 我们选取数据集的前两个特征来进行可视化, 进而绘制决策边界以及数据点。运行结果六、实践建议1.尽管库给出了便利的接口以达成机器学习算法, 然而深入领会算法的原理以及数学推导, 有益于我们更优地挑选适宜的算法、调节超参数以及明白模型的表现。2.重视数据质量, 因为数据乃是机器学习的根基, 数据质量的优劣会直接对模型的性能产生影响。于项目里, 需耗费充足的时间以及精力来开展数据收集、清洗还有预处理工作, 以此确保数据的准确性与完整性。3.针对模型进行调优时, 不同的超参数设定会给模型性能造成极大影响, 需借助交叉验证、网格搜索以及随机搜索等方式去寻觅最优的超参数组合, 与此同时, 要尝试各异的模型与算法, 对它们的性能予以对比, 进而挑选出最为适配的模型。4.始终不断持续学习, 在此机器学习这个领地方向之中发展速度极快, 崭新的算法以及技术持续不断接连连续涌现。留心看着关注有关学术领域所呈论文、行业方面出现的动态以及开源性质的项目, 持续不间断地学习, 并且加以实践, 从而提升自己于机器学习这片领域范围之内的能力。首先, 有那么一种情况, 它, 给机器学习奉献出了极强且便利的工具还有环境。接着, 凭借熟练拿捏常用库以及典型机器学习算法, 不光如此, 再联合实际项目去着手实践。这样我们就能够于机器学习范畴里面不停地探索以及创新, 进而解决更多实际存在着的问题。另外, 真心期望本文所做的总结, 可以对你依托于此的机器学习的学习跟实践给予一定的助力。
返回列表