FLDA进行蠓虫分类

 

FLDA(Fisher's Linear Discriminant Analysis)是一种常用的模式识别和特征提取方法。它基于线性代数的原理,通过将数据投影到低维空间,使得不同类别的样本在投影后的空间中更好地分离开来。FLDA可用于分类、特征选择和降维等任务。

FLDA的核心思想是最大化类间散布矩阵与最小化类内散布矩阵之比的值。通过求解广义特征值问题,可以得到最优投影方向。FLDA在许多模式识别和机器学习领域都有广泛的应用,如人脸识别、文本分类等。

FLDA是一种经典且有效的方法,但也有一些限制。例如,FLDA在处理高维数据时可能面临维数灾难的问题,同时它也假设数据满足高斯分布的条件。因此,在应用FLDA时需要根据具体问题进行适当的调整和优化。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
import warnings

warnings.filterwarnings("ignore")  # 忽略警告

# 设置字体为中文字体
plt.rcParams['font.family'] = 'SimHei'  # 使用微软雅黑或其他中文字体的名称

'''
Af:
    触角X  翅膀长度Y
0  1.24   1.27
1  1.36   1.74
2  1.38   1.64
3  1.38   1.82
4  1.38   1.90
5  1.40   1.70
6  1.48   1.82
7  1.54   1.82
8  1.56   2.08

Apf:
    触角X  翅膀长度Y
0  1.14   1.78
1  1.18   1.96
2  1.20   1.86
3  1.26   2.00
4  1.28   2.00
5  1.30   1.96
'''


class1_data = np.array([[1.24, 1.27],
                        [1.36, 1.74],
                        [1.38, 1.64],
                        [1.38, 1.82],
                        [1.38, 1.9],
                        [1.4, 1.7],
                        [1.48, 1.82],
                        [1.54, 1.82],
                        [1.56, 2.08]])
class2_data = np.array([[1.14, 1.78],
                        [1.18, 1.96],
                        [1.2, 1.86],
                        [1.26, 2.0],
                        [1.28, 2.0],
                        [1.3, 1.96]])


# 创建对应的类别标签
class1_labels = np.zeros(len(class1_data))  # 用0表示第一类数据
class2_labels = np.ones(len(class2_data))   # 用1表示第二类数据

# 将两类数据合并成一个数据集
X_train = np.vstack((class1_data, class2_data))
y_train = np.hstack((class1_labels, class2_labels))

# 初始化FLDA模型
lda = LinearDiscriminantAnalysis(n_components=1)

# 拟合FLDA模型
X_lda = lda.fit_transform(X_train, y_train)



# 创建新的数据点进行预测
new_data_points = np.array([[1.24, 1.80],
                            [1.28, 1.84],
                            [1.40, 2.04]])  # 三组新数据点

# 使用模型进行预测
predicted_classes = lda.predict(new_data_points)

# 输出预测结果
for i, predicted_class in enumerate(predicted_classes):
    if predicted_class == 0:
        print(f"第{i + 1}组数据预测为类别 1 (AF)")
    else:
        print(f"第{i + 1}组数据预测为类别 2 (APF)")


# 画出原始数据点
# 获取FLDA学习到的最佳投影线的参数
slope = lda.coef_[0][0]  # 斜率
intercept = lda.intercept_[0]  # 截距

# 绘制原始数据分布
plt.scatter(class1_data[:, 0], class1_data[:, 1], label="AF", color='red', marker='o', s=50)
plt.scatter(class2_data[:, 0], class2_data[:, 1], label="APF", color='blue', marker='x', s=50)

# 绘制最佳投影线
x_line = np.array([min(X_train[:, 0]), max(X_train[:, 0])])
y_line = slope * x_line + intercept
plt.plot(x_line, y_line, color='green', linestyle='--', label="最佳投影线")

plt.xlabel("触角X")
plt.ylabel("翅膀长度Y")
plt.legend()
plt.title("原始数据分布及最佳投影线")
plt.grid(True)
plt.show()



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值