Linear Discriminant Analysis and Quadratic Discriminant
Analysis are two classic classifiers(经典的分类模型), with, as their
names suggest, a linear and a quadratic decision surface,
respectively.
These classifiers(分类模型) are attractive because they have
closed-form (闭合)solutions that can be easily computed, are
inherently multiclass, have proven to work well in practice, and
have no hyperparameters to tune.
这里的介绍两种分类算法, 他们吸引的地方是易于计算,支持多类别,实际效果良好,无需调整超参数
1、Linear Discriminant
Analysis(线性判决分析)
import numpy
as np
from
sklearn.discriminant_analysis import
LinearDiscriminantAnalysis
X =
np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3,
2]]) #training
data
y =
np.array([1, 1, 1, 2, 2, 2]) #training
target
clf =
LinearDiscriminantAnalysis() #引入模型
clf.fit(X,
y) #训练
LinearDiscriminantAnalysis(n_components=None,
priors=None, shrinkage=None,
solver='svd',
store_covariance=False, tol=0.0001)
>>>
print(clf.predict([[-0.8, -1]])) #分类识别
[1]
这个和之前的线性回归分类算法使用方法差不多,先引入模型,fit, 然后再预测
2、Quadratic Discriminant
Analysis
A classifier
with a quadratic decision boundary, generated by fitting class
conditional densities to the data and using Bayes’
rule.The model fits a
Gaussian density to each class.
from
sklearn.discriminant_analysis import
QuadraticDiscriminantAnalysis
import numpy
as np
X =
np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3,
2]])
y =
np.array([1, 1, 1, 2, 2, 2])
clf =
QuadraticDiscriminantAnalysis()
clf.fit(X,
y)
...
QuadraticDiscriminantAnalysis(priors=None,
reg_param=0.0,
store_covariance=False,
store_covariances=None,
tol=0.0001)
>>>
print(clf.predict([[-0.8, -1]]))
[1]
这个分类算法并不是使用线性模型,而是使用贝叶斯规则,所以没有coef_,
intercept_等属性。
* 注:
LDA除了分类外,还可以降维reduce
dimension/decompose。在分类样本中有很多的feature实际意义不大,例如侦探小说、言情小说的封面颜色对于分类就很少意义,就可以降维处理。
from sklearn
import datasets
from
sklearn.decomposition import PCA #pca是专门降维的函数
from
sklearn.discriminant_analysis import
LinearDiscriminantAnalysis
iris =
datasets.load_iris()
X =
iris.data
y =
iris.target
target_names
= iris.target_names
pca =
PCA(n_components=2) #使用pca进行降维
X_r =
pca.fit(X).transform(X)
lda =
LinearDiscriminantAnalysis(n_components=2) #使用LDA的降维功能
X_r2 =
lda.fit(X, y).transform(X)