最强总结机器学习模型,LightGBM!!

文摘   2024-11-30 09:18   云南  

你好,我是小白~

今天和大家聊一个案例:基于 LightGBM 和 t-SNE 的分类任务与数据分析。

1. 背景与目标

我们通过使用 LightGBM(Light Gradient Boosting Machine)模型来进行分类任务,并结合 t-SNE(t-Distributed Stochastic Neighbor Embedding)进行降维可视化分析。我们将使用虚拟数据集,并展示如何应用 t-SNE 来分析高维数据的内在结构。

2. 数据集

为了实现我们的目标,我们生成一个虚拟的数据集,数据集包含多个特征和分类标签。我们将模拟一个具有高维特征的分类任务,通过该任务展示 LightGBM 模型的应用,并使用 t-SNE 对数据进行可视化降维。

数据集特征:

  • 特征数:100
  • 样本数:1000
  • 标签类别:2 类(0 和 1)

3. LightGBM 概述与原理

LightGBM 是一个高效的梯度提升决策树(GBDT)框架,采用了许多优化技术以提高训练速度和减少内存使用。它特别适合处理大规模数据集并能够快速训练出高效的模型。

LightGBM 的关键特点:

  • 基于树的模型:LightGBM 构建决策树,通过贪心算法来选择最佳的特征进行分裂。
  • 叶子节点优先的分裂策略:与传统的层级节点优先的分裂策略不同,LightGBM 使用叶子节点优先策略,能够更好地拟合数据,尤其适合有复杂模式的数据。
  • 支持类别特征:LightGBM 可以直接处理类别特征,无需进行 one-hot 编码等转换,提升了效率。
  • 分布式学习:LightGBM 支持多节点的分布式训练,能够处理大规模数据。

LightGBM 训练流程

1. 初始化:根据训练数据初始化模型参数。 2. 树构建:通过数据的分裂构建决策树。 3. 叶子节点分裂:通过最小化损失函数(如均方误差、交叉熵等)来选择最佳分裂点。 4. 迭代优化:模型不断优化,通过 boosting 方式不断调整树的权重。

4. t-SNE 原理与公式

什么是 t-SNE?

t-SNE(t-Distributed Stochastic Neighbor Embedding)是一种用于高维数据可视化的降维方法。t-SNE 尤其适用于在低维空间中展现高维数据的局部结构,即保留数据点之间的相似性关系。

t-SNE 算法步骤:

1. 计算相似度:首先计算数据点之间的相似度。在高维空间中,使用高斯分布计算数据点之间的相似度:

其中,   是数据点, 是与点  相关的带宽。

2. 映射到低维空间:将高维数据点映射到低维空间,计算低维空间中的点之间的相似度:

其中,   是低维空间中的点。

3. 最小化KL散度:为了使低维空间中的相似度分布尽可能接近高维空间中的分布,我们需要最小化高维和低维空间相似度之间的KL散度:

通过梯度下降法优化低维数据点的位置,最终得到低维嵌入。

t-SNE 的优缺点

优点:

  • 能很好地揭示数据的局部结构,适合可视化高维数据。
  • 比 PCA 等线性降维方法更能保留复杂的非线性结构。

缺点:

  • 计算复杂度较高,对于大规模数据集计算量大。
  • 降维结果可能受到初始条件和超参数(如 perplexity)的影响。

5. Python实现

数据生成与预处理

import numpy as np
import pandas as pd
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

# 生成虚拟数据集
X, y = make_classification(n_samples=10000, n_features=100, n_informative=50, n_classes=2, random_state=42)

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

LightGBM 模型训练

import lightgbm as lgb
from sklearn.metrics import accuracy_score

# 设置 LightGBM 的数据格式
train_data = lgb.Dataset(X_train, label=y_train)
test_data = lgb.Dataset(X_test, label=y_test, reference=train_data)

# 设置参数
params = {
    'objective''binary',
    'metric''binary_error',
    'boosting_type''gbdt',
    'num_leaves'31,
    'learning_rate'0.05,
    'feature_fraction'0.9,
}

# 训练模型
num_round = 100
bst = lgb.train(params, train_data, num_round, valid_sets=[test_data], early_stopping_rounds=10)

# 预测结果
y_pred = bst.predict(X_test, num_iteration=bst.best_iteration)
y_pred = np.round(y_pred)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.4f}')

使用 t-SNE 可视化降维

from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
import seaborn as sns

# 使用 t-SNE 对高维数据进行降维
tsne = TSNE(n_components=2, random_state=42)
X_tsne = tsne.fit_transform(X_test)

# 绘制 t-SNE 图
plt.figure(figsize=(108))
sns.scatterplot(x=X_tsne[:, 0], y=X_tsne[:, 1], hue=y_test, palette="Set1", s=60, edgecolor='k', marker='o')
plt.title('t-SNE Visualization of High-Dimensional Data')
plt.xlabel('t-SNE Component 1')
plt.ylabel('t-SNE Component 2')
plt.legend(title='Class', loc='upper right')
plt.show()

在这个示例中,我们通过 LightGBM 训练了一个分类模型,并计算了预测准确率。

之后,使用 t-SNE 对高维数据进行了降维,并通过颜色区分类别,生成了数据点的散点图。这种方式帮助我们理解数据在低维空间中的分布和类别之间的关系。

t-SNE 可视化图:通过 t-SNE 将高维数据映射到 2D 平面,展示了不同类别数据点的分布情况。颜色代表不同的类别,我们可以观察到,类别 0 和类别 1 的数据点有较明显的分离,表明模型在这一数据集上可能取得较好的分类效果。


临床研究与医学统计
传播和普及临床试验与医学统计方法学知识
 最新文章