自学内容网 自学内容网

【大数据】机器学习----------降维与度量学习

1. 降维与度量学习概述

降维旨在将高维数据映射到低维空间,同时尽可能保留重要信息,而度量学习旨在学习数据之间的距离度量,以改善学习算法的性能。

2. K近邻学习(K-Nearest Neighbors, KNN)

2.1 基本概念
  • KNN是一种基于实例的学习算法,对于一个新的数据点,根据其最近的(k)个邻居的类别来确定该点的类别(分类)或根据其最近的(k)个邻居的属性计算该点的属性(回归)。
2.2 数学公式
  • 对于分类:在这里插入图片描述
    ,其中(N_k(x))是(x)的(k)个最近邻居,(y_i)是邻居(x_i)的类别,(I)是指示函数。
2.3 代码示例(使用 Python 和 scikit-learn
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score


# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建 KNN 分类器
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# 预测
y_pred = knn.predict(X_test)

# 计算准确率
print("Accuracy:", accuracy_score(y_test, y_pred))

在这里插入图片描述

3. 低维嵌入

3.1 基本概念
  • 将高维数据映射到低维空间,保持数据的某些特性,如局部结构或全局结构。

4. 主成分分析(Principal Component Analysis, PCA)

4.1 基本概念
  • 找到数据的主成分,即数据方差最大的方向,将数据投影到这些方向上,实现降维。
4.2 数学公式
4.3 代码示例(使用 Python 和 scikit-learn
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA


# 生成数据
np.random.seed(42)
X = np.random.randn(100, 5)

# PCA 降维
pca = PCA(n_components=2)
X_reduced = pca.fit_transform(X)

# 可视化结果
plt.scatter(X_reduced[:, 0], X_reduced[:, 1])
plt.show()

在这里插入图片描述

5. 核化线性降维

5.1 基本概念
  • 将数据映射到高维空间,然后在高维空间进行线性降维,通常使用核技巧避免显式计算高维映射。
5.2 数学公式
  • 核矩阵(K):在这里插入图片描述
    ,其中(\varphi)是核函数。
5.3 代码示例(使用 Python 和 scikit-learn
from sklearn.decomposition import KernelPCA


# 生成数据
np.random.seed(42)
X = np.random.randn(100, 5)

# 核 PCA 降维
kpca = KernelPCA(n_components=2, kernel='rbf')
X_reduced = kpca.fit_transform(X)

# 可视化结果
plt.scatter(X_reduced[:, 0], X_reduced[:, 1])
plt.show()

在这里插入图片描述

6. 流形学习

6.1 基本概念
  • 假设数据位于一个低维流形上,通过保持流形的局部结构将高维数据映射到低维空间。
6.2 代码示例(使用 Python 和 scikit-learn
from sklearn.datasets import make_swiss_roll
from sklearn.manifold import Isomap


# 生成瑞士卷数据
X, color = make_swiss_roll(n_samples=1000, random_state=42)

# Isomap 流形学习
isomap = Isomap(n_neighbors=10, n_components=2)
X_reduced = isomap.fit_transform(X)

# 可视化结果
plt.scatter(X_reduced[:, 0], X_reduced[:, 1], c=color)
plt.show()

在这里插入图片描述

7. 度量学习

7.1 基本概念
  • 学习一个距离度量(d(x,y)),使同类样本之间的距离更近,不同类样本之间的距离更远。
7.2 代码示例(使用 Python 和 scikit-learn
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
from metric_learn import LMNN


# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 使用 LMNN 进行度量学习
lmnn = LMNN(k=3, learn_rate=1e-3)
lmnn.fit(X_train, y_train)
X_train_metric = lmnn.transform(X_train)
X_test_metric = lmnn.transform(X_test)

# 使用 KNN 分类器
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train_metric, y_train)

# 预测
y_pred = knn.predict(X_test_metric)

# 计算准确率
print("Accuracy:", accuracy_score(y_test, y_pred))

代码解释

KNN 代码解释:
  • datasets.load_iris():加载鸢尾花数据集。
  • train_test_split:划分训练集和测试集。
  • KNeighborsClassifier:创建 KNN 分类器,设置邻居数量。
  • knn.fit(X_train, y_train):训练 KNN 分类器。
  • knn.predict(X_test):对测试集进行预测。
PCA 代码解释:
  • np.random.randn:生成随机数据。
  • PCA(n_components=2):创建 PCA 降维器,设置降维后的维度。
  • pca.fit_transform(X):对数据进行降维。
核化线性降维(Kernel PCA)代码解释:
  • KernelPCA:创建核 PCA 降维器,设置降维后的维度和核函数。
  • kpca.fit_transform(X):对数据进行核化降维。
流形学习(Isomap)代码解释:

make_swiss_roll:生成瑞士卷数据。

  • Isomap:创建 Isomap 流形学习器,设置邻居数量和降维后的维度。
  • isomap.fit_transform(X):对数据进行流形学习降维。
度量学习代码解释:

load_iris():加载鸢尾花数据集。

  • LMNN:使用 Large Margin Nearest Neighbor (LMNN) 进行度量学习。
  • lmnn.transform:将数据转换为新的度量空间。
  • KNeighborsClassifier:使用 KNN 分类器进行分类。

注意:

  • 在使用 metric_learn 库时,你需要先安装该库,可通过 pip install metric_learn 进行安装。

在这里插入图片描述


原文地址:https://blog.csdn.net/yuanbenshidiaos/article/details/145268442

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!