机器学习之路:FaceBook预测案例分析----->KNN算法的应用与调优

小白的机器学习之路(二)

  • 引子
  • 学习机器学习基础:从理论到实践
    • 了解机器学习
      • 机器学习的定义
      • 机器学习的分类
      • 机器学习的基本原理
    • 掌握数据预处理
      • 数据清洗
      • 特征选择
      • 特征工程
    • 分类算法
    • sklearn转换器和预估器
    • KNN算法
    • 获取数据
    • 数据集划分
    • 特征工程—标准化
  • KNN算法

引子

当前交通大数据业务的需要,需要承担一部分算法工作(数据处理),

机器学习之路:FaceBook预测案例分析----->KNN算法的应用与调优_第1张图片

目标一:

  • 学习机器学习基础:了解机器学习的定义、分类和基本原理。
  • 掌握数据预处理:学习数据清洗、特征选择和特征工程的基本方法。

目标任务:使用机器学习算法对一个简单的数据集进行数据预处理。

目标二:

  • 学习监督学习算法:重点学习K-邻近、决策树和朴素贝叶斯算法,并理解它们的应用场景和原理。

目标任务:使用监督学习算法对一个分类问题进行建模和训练。

目标三:

  • 学习无监督学习算法:学习聚类和降维算法,如K-Means、PCA等。

目标任务:使用无监督学习算法对一个数据集进行聚类分析。

目标四:

  • 学习深度学习基础:了解神经网络的基本结构、反向传播算法和激活函数等。

目标任务:使用深度学习算法构建一个简单的神经网络模型,并训练模型。

目标五:

  • 学习深度学习框架:学习使用PyTorch或TensorFlow等深度学习框架。

目标任务:使用深度学习框架搭建一个更复杂的神经网络,并在一个数据集上进行训练和测试。

学习计划小贴士:

  • 每天定期复习前几天的内容,巩固知识。

  • 在学习过程中遇到问题及时查阅资料,或向论坛、社区寻求帮助。

  • 尝试在学习过程中动手实践,通过编写代码来加深对算法和原理的理解。

  • 学习过程中保持积极的学习态度和耐心,机器学习和深度学习是复杂的领域,需要持续学习和实践。

  • 学习机器学习基础:了解机器学习的定义、分类和基本原理。

  • 掌握数据预处理:学习数据清洗、特征选择和特征工程的基本方法。

准备一份草稿,后面更新

学习机器学习基础:从理论到实践

机器学习是如今计算机科学领域中最炙手可热的分支之一,无论是用于预测、分类还是优化问题,它都提供了无限的可能性。在这篇博客中,我们将深入探讨机器学习的基础知识,包括定义、分类、以及它的基本原理。接着,我们将学习如何处理数据,包括数据清洗、特征选择和特征工程的基本方法。最后,我们将深入研究一个常见的分类算法——K最近邻(KNN)算法,包括如何获取数据、划分数据集、进行特征工程、构建KNN模型以及评估模型性能。

了解机器学习

机器学习的定义

机器学习是一种人工智能的分支,旨在通过模型和算法使计算机系统能够从数据中学习并不断改进性能。与传统的编程方式不同,机器学习系统具有自适应性,可以根据数据进行学习和决策,而不是通过显式编码规则来执行任务。

机器学习的分类

机器学习可以分为以下几个主要类别:

  1. 监督学习(Supervised Learning):在监督学习中,模型从带有标签的训练数据中学习,然后用于预测新的、未标记的数据。常见的监督学习任务包括分类和回归。

  2. 无监督学习(Unsupervised Learning):无监督学习涉及到从未标记的数据中发现模式和结构。常见的无监督学习任务包括聚类和降维。

  3. 半监督学习(Semi-Supervised Learning):半监督学习是监督学习和无监督学习的结合,它使用少量标记数据和大量未标记数据进行训练。

  4. 强化学习(Reinforcement Learning):在强化学习中,代理程序学习如何在一个环境中采取行动以最大化奖励信号。这种学习通常涉及到与环境的交互。

机器学习的基本原理

机器学习的核心原理是使用数学和统计方法来训练模型,使其能够从数据中提取模式和关系。其中一些基本原理包括:

  • 损失函数(Loss Function):用于测量模型的性能,通常表示为模型预测与实际值之间的差异。

  • 优化算法(Optimization Algorithm):用于调整模型参数以最小化损失函数。常用的优化算法包括梯度下降和随机梯度下降。

  • 特征工程(Feature Engineering):涉及选择和转换输入特征,以便模型能够更好地理解数据。

掌握数据预处理

数据清洗

数据清洗是数据预处理的第一步,涉及到检测和纠正数据中的错误、缺失值和异常值。这个过程确保数据质量,以便更好地训练模型。

特征选择

特征选择是选择最相关的特征以减少维度并提高模型性能的过程。它有助于减少模型的过度拟合和降低计算成本。

特征工程

特征工程涉及到创建新的特征、进行特征变换以及将数据转化为适合模型训练的形式。好的特征工程可以显著改善模型性能。

分类算法

在机器学习中,分类是一种常见的任务,它涉及将数据点分为不同的类别或标签。分类算法包括决策树、支持向量机、朴素贝叶斯等等。

sklearn转换器和预估器

scikit-learn(sklearn)是一个流行的Python机器学习库,它提供了各种转换器(transformers)和预估器(estimators)来简化机器学习流程。转换器用于数据预处理,而预估器用于训练和评估模型。

KNN算法

K最近邻(KNN)算法是一种简单而强大的分类算法。它的工作原理是基于输入数据点周围的K个最近邻居的类别来对新数据点进行分类。KNN算法不需要模型训练,因此简单而直观。

获取数据

在实际应用中,获取数据是机器学习项目的第一步。数据可以来自各种来源,包括文件、数据库、API等等。合适的数据收集和整理是成功的关键。

数据集划分

为了训练和评估模型,我们通常将数据集划分为训练集、验证集和测试集。这有助于评估模型的泛化性能。

特征工程—标准化

标准化是特征工程的一部分,它确保不同特征的值在相同的尺度上。这有助于模型更好地处理数据。

KNN算法

在机器学习中,K最近邻(KNN)算法是一种简单而强大的分类算法,它的工作原理是基于输入数据点周围的K个最近邻居的类别来对新数据点进行分类。在这篇博客中,我们将详细介绍如何使用KNN算法来完成一个分类任务,并包括以下步骤:

获取数据
数据集划分
特征工程 - 标准化
KNN预估器流程
模型评估
我们将使用Python的scikit-learn库来演示KNN算法的实际应用。首先,确保你已经安装了scikit-learn库。如果没有安装,你可以使用以下命令进行安装:

  1. 获取数据
    首先,我们需要获取数据。在这个示例中,我们将使用鸢尾花(Iris)数据集,这是一个常用的数据集,包含三种不同类别的鸢尾花的特征测量值。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

def datasets_demo():
    # 加载鸢尾花数据集
    iris = load_iris()
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=6)
    return x_train, x_test, y_train, y_test

if __name__ == "__main__":
    x_train, x_test, y_train, y_test = datasets_demo()

  1. 数据集划分
    在机器学习中,通常将数据集划分为训练集和测试集,以便在训练模型后评估其性能。我们使用train_test_split函数来划分数据集。

  2. 特征工程 - 标准化
    特征工程是数据预处理的重要步骤之一,它有助于提高模型的性能。在这里,我们使用标准化来确保不同特征的值在相同的尺度上。我们使用StandardScaler来进行标准化。

def datasets_demo():
    # 加载鸢尾花数据集
    iris = load_iris()
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=6)

    # 特征标准化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)

    return x_train, x_test, y_train, y_test

if __name__ == "__main__":
    x_train, x_test, y_train, y_test = datasets_demo()

  1. KNN预估器流程
    现在,我们将使用KNN算法来创建一个分类模型。首先,我们创建一个KNN分类器,并使用训练数据来拟合该模型。
def knn_demo(x_train, x_test, y_train, y_test):
    # 创建KNN分类器,设置K值为3
    estimator = KNeighborsClassifier(n_neighbors=3)
    estimator.fit(x_train, y_train)
    return estimator

if __name__ == "__main__":
    x_train, x_test, y_train, y_test = datasets_demo()
    knn_estimator = knn_demo(x_train, x_test, y_train, y_test)

  1. 模型评估
    最后,我们对模型进行评估以了解其性能。在这里,我们使用模型对测试数据进行预测,并计算其准确率。
def knn_demo(x_train, x_test, y_train, y_test):
    # 创建KNN分类器,设置K值为3
    estimator = KNeighborsClassifier(n_neighbors=3)
    estimator.fit(x_train, y_train)

    # 使用模型进行预测
    y_predict = estimator.predict(x_test)

    # 计算准确率
    score = estimator.score(x_test, y_test)
    print("模型准确率:", score)

if __name__ == "__main__":
    x_train, x_test, y_train, y_test = datasets_demo()
    knn_demo(x_train, x_test, y_train, y_test)



import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data[:, :2]  # 仅选择前两个特征以便可视化
y = iris.target

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 特征标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# 创建KNN分类器,设置K值为3
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# 绘制决策边界
cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])
cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])

x_min, x_max = X_train[:, 0].min() - 1, X_train[:, 0].max() + 1
y_min, y_max = X_train[:, 1].min() - 1, X_train[:, 1].max() + 1

xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
                     np.arange(y_min, y_max, 0.02))

Z = knn.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.figure()
plt.pcolormesh(xx, yy, Z, cmap=cmap_light)

# 绘制训练集和测试集
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cmap_bold, edgecolor='k', s=20)
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cmap_bold, edgecolor='k', marker='*', s=100)

plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.title("KNN Classification")
plt.show()


你可能感兴趣的:(机器学习,算法,人工智能)