lda线性判别分析代码
时间: 2023-12-27 09:01:15 浏览: 94
LDA(Linear Discriminant Analysis)是一种常用的分类算法,它通过将数据投影到一个低维空间中,以便更好地区分不同类别的样本。下面是一个简单的LDA代码示例:
```python
import numpy as np
class LDA:
def fit(self, X, y):
# 分别计算每个类别的样本均值
class_means = []
for c in np.unique(y):
class_means.append(np.mean(X[y == c], axis=0))
# 计算类内散布矩阵Sw
n_features = X.shape[1]
S_w = np.zeros((n_features, n_features))
for c, mean in zip(np.unique(y), class_means):
class_scatter = np.zeros((n_features, n_features))
for row in X[y == c]:
row, mean = row.reshape(n_features, 1), mean.reshape(n_features, 1)
class_scatter += (row - mean).dot((row - mean).T)
S_w += class_scatter
# 计算类间散布矩阵Sb
overall_mean = np.mean(X, axis=0)
S_b = np.zeros((n_features, n_features))
for c in range(len(class_means)):
n = X[y == c].shape[0]
class_means[c] = class_means[c].reshape(n_features, 1)
overall_mean = overall_mean.reshape(n_features, 1)
S_b += n * (class_means[c] - overall_mean).dot((class_means[c] - overall_mean).T)
# 计算投影矩阵W
eigen_values, eigen_vectors = np.linalg.eig(np.linalg.inv(S_w).dot(S_b))
sorted_indexes = np.argsort(eigen_values)[::-1]
self.projection_matrix = eigen_vectors[:, sorted_indexes[:1]]
def transform(self, X):
return np.dot(X, self.projection_matrix)
# 使用样例
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7]])
y = np.array([0, 0, 0, 1, 1, 1])
lda = LDA()
lda.fit(X, y)
X_lda = lda.transform(X)
print(X_lda)
```
这是一个简单的LDA实现代码,主要包括了计算类内散布矩阵Sw、类间散布矩阵Sb以及投影矩阵W,最后可以通过fit方法获取投影后的数据。
阅读全文
相关推荐















