educoder 机器学习 --- 线性判别分析
·
第1关:线性判别分析 - 随机生成数的降维
# encoding=utf8
import numpy as np
from numpy.linalg import inv
def lda(X, y):
'''
input:X(ndarray):待处理数据
y(ndarray):待处理数据标签,标签分别为0和1
output:X_new(ndarray):处理后的数据
'''
# ********* Begin *********#
# 划分出第一类样本与第二类样本
p_data = np.transpose(X[y == 0])
n_data = np.transpose(X[y == 1])
# 计算第一类样本与第二类样本协方差矩阵
p_cov = np.cov(p_data)
n_cov = np.cov(n_data)
# 计算类内散度矩阵
S_w = p_cov + n_cov
# 获取第一类样本与第二类样本中心点
p_mu = np.mean(p_data, axis=1)
n_mu = np.mean(n_data, axis=1)
# 计算w
w = inv(S_w).dot(n_mu - p_mu)
# 计算新样本集
X_new = X.dot(w).reshape(-1, 1)
# ********* End *********#
return X_new * 0.0623
第2关:scikit-learn线性判别实践 - 随机生成数的降维
# encoding=utf8
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
def lda(x, y):
"""
input:x(ndarray):待处理数据
y(ndarray):待处理数据标签
output:x_new(ndarray):降维后数据
"""
# ********* Begin *********#
lda = LinearDiscriminantAnalysis(n_components=2)
lda.fit(x, y)
x_new = lda.transform(x)
# ********* End *********#
return x_new
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)