LDA and QDA 分类:机器学习 Sklearn

来源:互联网 发布:全站仪数据.dat下载 编辑:程序博客网 时间:2024/06/05 06:30
简单的R实现:

library(MASS)
Iris <- data.frame(rbind(iris3[,,1], iris3[,,2], iris3[,,3]), Sp = rep(c(“s”, “c”, “v”), rep(50, 3)))
y_hat <- predict(lda(Sp~.,Iris, prior = c(1, 1, 1)/3),Iris)classsum(yhat==IrisSp)/150

一般numpy中对于ndarray的处理对python内置list也是可以作用的。(构造函数实现了转型)
下面对sklearn中线性判别及二次判别进行了调用,并与DIY二次判别进行比较,
这里使用了python字符串执行及实例化函数exec及eval提高了DIY函数的可重用性:

[python] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. from __future__ import division  
  2. import numpy as np   
  3. from sklearn.datasets import load_iris   
  4. from sklearn.discriminant_analysis import LinearDiscriminantAnalysis, QuadraticDiscriminantAnalysis  
  5. from functools import partial  
  6.   
  7. iris = load_iris()  
  8. data, target = iris.data, iris.target  
  9.   
  10. X, y = data, target  
  11. clf = LinearDiscriminantAnalysis()  
  12. clf.fit(X, y)  
  13. y_hat = clf.predict(X)  
  14.   
  15. print “the sklearn lda accuracy :”  
  16. print np.sum(y_hat == y) / y.shape[0]  
  17.   
  18. clf = QuadraticDiscriminantAnalysis()  
  19. clf.fit(X, y)  
  20. y_hat = clf.predict(X)  
  21.   
  22. print “the sklearn lda accuracy :”  
  23. print np.sum(y_hat == y) / y.shape[0]  
  24.   
  25.   
  26. def discrtminant_func(x ,X, prior_probability):  
  27.  cov_matrix = np.cov(X.T)  
  28.  mean_vector = np.mean(X, axis = 0)  
  29.   
  30.  return np.dot(np.dot((x - mean_vector).T , np.linalg.inv(cov_matrix)), x - mean_vector) * (-0.5) + \  
  31.    np.log(2 * np.pi) * (-0.5 * X.shape[0]) + np.log(np.linalg.det(cov_matrix)) * (-0.5) + np.log(prior_probability)  
  32.   
  33. factors = np.unique(y)  
  34. prior_probability = 1 / len(factors)  
  35. for i in range(len(factors)):  
  36.  exec(“X” + str(factors[i]) + “= X[y == ” + str(factors[i]) + “,]”)  
  37.  exec(“discrtminant_func” + str(factors[i]) + “=partial(discrtminant_func, X = X” + str(factors[i]) + “, prior_probability = ” + str(prior_probability) + “)”)  
  38.   
  39. def y_predict_qda(x):  
  40.  return np.argmax([eval(“discrtminant_func” + str(factor) + “(x)”for factor in factors])  
  41.   
  42. print “the diy qda accuracy :”  
  43. print np.sum(np.array(map(y_predict_qda, X)) == y) / y.shape[0]  
from __future__ import divisionimport numpy as np from sklearn.datasets import load_iris from sklearn.discriminant_analysis import LinearDiscriminantAnalysis, QuadraticDiscriminantAnalysisfrom functools import partialiris = load_iris()data, target = iris.data, iris.targetX, y = data, targetclf = LinearDiscriminantAnalysis()clf.fit(X, y)y_hat = clf.predict(X)print "the sklearn lda accuracy :"print np.sum(y_hat == y) / y.shape[0]clf = QuadraticDiscriminantAnalysis()clf.fit(X, y)y_hat = clf.predict(X)print "the sklearn lda accuracy :"print np.sum(y_hat == y) / y.shape[0]def discrtminant_func(x ,X, prior_probability): cov_matrix = np.cov(X.T) mean_vector = np.mean(X, axis = 0) return np.dot(np.dot((x - mean_vector).T , np.linalg.inv(cov_matrix)), x - mean_vector) * (-0.5) + \   np.log(2 * np.pi) * (-0.5 * X.shape[0]) + np.log(np.linalg.det(cov_matrix)) * (-0.5) + np.log(prior_probability)factors = np.unique(y)prior_probability = 1 / len(factors)for i in range(len(factors)): exec("X" + str(factors[i]) + "= X[y == " + str(factors[i]) + ",]") exec("discrtminant_func" + str(factors[i]) + "=partial(discrtminant_func, X = X" + str(factors[i]) + ", prior_probability = " + str(prior_probability) + ")")def y_predict_qda(x): return np.argmax([eval("discrtminant_func" + str(factor) + "(x)") for factor in factors])print "the diy qda accuracy :"print np.sum(np.array(map(y_predict_qda, X)) == y) / y.shape[0]



与分类相对应的是降维,其仅仅是组间与组内方差阵的相对特征值。




















更多了解请浏览:http://blog.csdn.net/sinat_30665603
原创粉丝点击