线性判别分析(Linear Discriminant Analysis, LDA)是一种有监督的线性降维方法,主要用于分类问题。LDA 的目标是最大化类间距离(between-class variance)同时最小化类内距离(within-class variance),从而提高分类效果。与 PCA 不同,LDA 考虑了类别标签信息,这使得 LDA 在分类任务中通常表现更好.

2.1使用 sklearn 实现 LDA

当然可以!LinearDiscriminantAnalysisscikit-learn 库中的一个类,用于执行线性判别分析(LDA)。以下是 LinearDiscriminantAnalysis 类的参数列表及其解释:

2.1.1参数列表
LinearDiscriminantAnalysis(solver='svd', shrinkage=None, priors=None, n_components=None, store_covariance=False, tol=0.0001)
2.1.2参数解释
  1. solver:字符串,默认为 'svd'

    • 选择求解器类型。

    • 可选值:

      • 'svd':奇异值分解(SVD),不计算协方差矩阵,适用于高维数据。

      • 'lsqr':最小二乘法,可以使用 shrinkage。

      • 'eigen':特征值分解,可以使用 shrinkage。

  2. shrinkage:字符串或浮点数,默认为 None

    • 选择是否使用 shrinkage 方法来改进协方差矩阵的估计。

    • 可选值:

      • None:不使用 shrinkage。

      • 'auto':自动选择最优的 shrinkage 参数。

      • 浮点数:手动指定 shrinkage 参数的值。

  3. priors:数组,默认为 None

    • 各类别的先验概率。

    • 如果为 None,则使用类别的经验频率作为先验概率。

  4. n_components:整数,默认为 None

    • 降维后的特征数量。

    • 如果为 None,则不进行降维。

    • 必须小于等于类别数减一。

  5. store_covariance:布尔值,默认为 False

    • 是否存储每个类别的协方差矩阵。

    • 如果为 True,则会在 fit 方法后存储每个类别的协方差矩阵。

  6. tol:浮点数,默认为 0.0001

    • 收敛阈值,仅在 solver='lsqr' 时使用。

    • 控制最小二乘法的收敛条件。

2.1.3示例代码

以下是一个使用 LinearDiscriminantAnalysis 的示例代码,展示了如何设置这些参数:

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
​
# 加载数据集
data = load_iris()
X = data.data
y = data.target
​
# 标准化数据
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
​
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42)
​
# 创建 LDA 模型
lda = LinearDiscriminantAnalysis(
    solver='svd',          # 使用奇异值分解求解器
    shrinkage=None,        # 不使用 shrinkage
    priors=None,           # 使用默认先验概率
    n_components=2,        # 降维到 2 维
    store_covariance=False, # 不存储协方差矩阵
    tol=0.0001             # 收敛阈值
)
​
# 拟合模型
X_train_lda = lda.fit_transform(X_train, y_train)
​
# 变换测试集
X_test_lda = lda.transform(X_test)
​
# 可视化结果
plt.figure()
colors = ['navy', 'turquoise', 'darkorange']
lw = 2
​
for color, i, target_name in zip(colors, [0, 1, 2], data.target_names):
    plt.scatter(X_train_lda[y_train == i, 0], X_train_lda[y_train == i, 1], color=color, alpha=.8, lw=lw,
                label=target_name)
​
plt.legend(loc='best', shadow=False, scatterpoints=1)
plt.title('LDA of IRIS dataset')
plt.xlabel('LDA1')
plt.ylabel('LDA2')
plt.show()
2.1.4参数解释总结
  • solver:选择求解器类型,影响计算效率和适用场景。

  • shrinkage:是否使用 shrinkage 方法,有助于改善协方差矩阵的估计。

  • priors:设置类别的先验概率,影响模型的分类决策。

  • n_components:降维后的特征数量,控制降维的程度。

  • store_covariance:是否存储协方差矩阵,影响内存使用。

  • tol:收敛阈值,仅在 solver='lsqr' 时使用,控制最小二乘法的收敛条件。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐