英文官方教程链接如下:
https://scikit-learn.org/stable/modules/lda_qda.htmlhttps://scikit-learn.org/stable/modules/lda_qda.html这一部分还是挺麻烦的,生词较多,没有直接的代码。不过,我发现了,点击图片就会跳出更详细相关内容的详细代码和可视化,大家可以试着从跟详细的内容里学习。我就简单说说了。
LinearDiscriminantAnalysis 和 QuadraticDiscriminantAnalysis 是两种经典的分类器。前者是线性的,后者是二次的。他们有相似的易于计算的解决方案 (solutions),有效且没有要调的超参数。
LinearDiscriminantAnalysis 通过将输入数据映射到线性子平面——由最大化不同类别间的分离方向构成,可用于执行监督降维。输出维度必然小于类别数量。它在 transformer 方法里被实施,需要的维度可以通过 n_components 参数设置,这个参数对 fit 和 predict 都没影响。
参数 | 描述 |
solver | default='svd',lsqr、eigen可选。 |
shrinkage | 'auto' 或 float (0到1之间),default=None,收缩参数 |
priors | default=None,形为 (n_classes,) 的数组。类先验概率 (the class prior probabilities),默认情况下,它是由训练数据推理得到的 |
n_components | int,default=None,用来降维的成分数量,<=min(n_classes-1,n_features)。如果设为None,那就是min(n_classes-1,n_features),它只对 transform 方法有作用 |
store_covariance | default=False,如果为True,当 solver='svd',直接计算类内权重系数矩阵。这个矩阵一直被计算并存着给其他的 solver 用 |
tol | float,default=1.0e-4,要考虑的 X 的奇异值的绝对阈值,用来评估 X 的秩。奇异值不显著的维度将被丢弃。只有 solver='svd' 的时候被使用 |
covariance_estimator | default=None,协方差评估器。如果为None,它将品谷歌协方差矩阵而不是以来有潜在收缩的经验协方差评估器。如果用了 shrinkage,那他将被设为None。只有 solver='lsqr' or 'eigen' 时奏效 |
类属性 | |
.coef_ | 略 |
intercept_ | 略 |
.covariance_ | 形为 (n-features,n-features) 的数组。类内权重协方差矩阵。(还有一句我没看懂) |
.explained_variance_ratio_ | 形为 (n-components,) 的数组,被每一个被选择的成分解释的变量占比。如果 n_components 没有被设置,那所有的成分都被存储,并且被解释的变量和为1.0。只有 solver='svd' or 'eigen' 奏效 |
.means_ | 形为 (n-classes,n-features) 的数组。class-wise means |
.priors_ | 形为 (n-classes,) 的数组。class priors,和为1 |
.scalings_ | 形如 (ranks,n-classes-1) 的数组,在空间上被类质心扫面的特征的缩放。只有 solver='svd' or 'eigen' 奏效 |
.xbar_ | 形为 (n-features,) 的数组。全局均值,只有 solver='svd' 奏效 |
.classes_ | 形为 (n-classes,) 的数组。独一无二的类标签 |
.n_features_in_ | 略 |
.feature_names_in_ | 略 |
from matplotlib import pyplot as plt
from sklearn import datasets
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
wine = datasets.load_wine()
data = wine.data
print(data)
target = wine.target
print(target)
#[0 ···,1 ···,2 ···]
target_names = wine.target_names
print(target_names)
#['class_0' 'class_1' 'class_2']
lda = LinearDiscriminantAnalysis(n_components=2)
X_r = lda.fit(data,target).transform(data)
#transform的输入是形如(n_samples, n_features)的数组
#输出是形如(n_samples, n_components)的转换数据
print(X_r)
#截取了前三行,还望能看懂的人不吝赐教
# [[-4.70024401 1.97913835]
# [-4.30195811 1.17041286]
# [-3.42071952 1.42910139]
colors = ["navy", "turquoise", "darkorange"]
plt.figure()
for color, i, target_name in zip(colors, [0, 1, 2], target_names):
plt.scatter(
X_r[target == i, 0], X_r[target == i, 1], alpha=0.8,
color=color, label=target_name)
#参数1是x,参数2是y,alpha我没弄懂
plt.legend(loc="best", shadow=False, scatterpoints=1)
#在轴上放置图例,就是小方框
plt.title("LDA of wine dataset")
plt.show()
QuadraticDiscriminantAnalysis 的使用方法类似,大家自己看一看吧。官网的这一页还有还多的数学公式,这里我就不讲了,因为我现在也弄不懂,等我弄懂了再和大家分享。