数据处理+贪婪算法+主成分分析PCA+线性判别分析 (LDA)+Fisher 判别准则

异常值与重复数据检测

局部离群因子 (Local Outlier Factor, LOF) 算法

LOF算法是一种用于检测数据集中异常点的算法。其核心思想是比较一个点的局部密度与其邻居的局部密度。算法的主要步骤和公式如下:

  1. 计算k-距离(k-distance):
    对于每个点P,其k-距离被定义为点P和它的第k个最近邻居之间的距离。

  2. 计算可达距离(Reachability Distance):
    可达距离定义为点A到点B的距离与点B的k-距离的最大值。
    Reachability-Distance k ( A , B ) = max ⁡ ( k-distance ( B ) , d ( A , B ) ) \text{Reachability-Distance}_k(A, B) = \max(\text{k-distance}(B), d(A, B)) Reachability-Distancek(A,B)=max(k-distance(B),d(A,B))
    其中d(A, B)是点A和点B之间的距离。

  3. 计算局部可达密度(Local Reachability Density, LRD):
    P的局部可达密度是点P的k个最近邻居的可达距离的倒数的平均值。
    LRD k ( P ) = 1 ∑ O ∈ N k ( P ) Reachability-Distance k ( P , O ) ∣ N k ( P ) ∣ \text{LRD}_k(P) = \frac{1}{\frac{\sum_{O \in N_k(P)} \text{Reachability-Distance}_k(P, O)}{|N_k(P)|}} LRDk(P)=Nk(P)ONk(P)Reachability-Distancek(P,O)1
    其中N_k(P)是点P的k个最近邻居。

  4. 计算局部离群因子(LOF):
    对于每个点P,其局部离群因子是其邻居的局部可达密度与它自己的局部可达密度的比值的平均值。
    LOF k ( P ) = ∑ O ∈ N k ( P ) LRD k ( O ) LRD k ( P ) ∣ N k ( P ) ∣ \text{LOF}_k(P) = \frac{\sum_{O \in N_k(P)} \frac{\text{LRD}_k(O)}{\text{LRD}_k(P)}}{|N_k(P)|} LOFk(P)=Nk(P)ONk(P)LRDk(P)LRDk(O)

数据描述

数据最好用中位数median,而不是均值mean
mode众数
mean平均值
在这里插入图片描述

方差variance:
Var ( X ) = 1 N ∑ i = 1 N ( x i − μ ) 2   \text{Var}(X) = \frac{1}{N} \sum_{i=1}^{N} (x_i - \mu)^2 \ Var(X)=N1i=1N(xiμ)2 

皮尔森积差相关系数
R ( A , B ) = ∑ i = 1 N ( x i − x ‾ ) ( y i − y ‾ ) ∑ i = 1 N ( x i − x ‾ ) 2 ∑ i = 1 N ( y i − y ‾ ) 2 R(A,B) = \frac{\sum_{i=1}^{N} (x_i - \overline{x})(y_i - \overline{y})}{\sqrt{\sum_{i=1}^{N}(x_i - \overline{x})^2 \sum_{i=1}^{N}(y_i - \overline{y})^2}} R(AB)=i=1N(xix)2i=1N(yiy)2 i=1N(xix)(yiy)

如果R(A,B)>0,则A和B正相关。
如果R(A,B)=0,则A和B之间没有线性相关性。只是没有线性不相关,可能有其他相关性。
若R(A,B)<0,则A与B呈负相关。

卡方检验:
χ 2 = ∑ ( O i − E i ) 2 E i 其中 O i 是观察值 , E i 是期望值。 \chi^2 = \sum \frac{(O_i - E_i)^2}{E_i} 其中O_i是观察值,E_i是期望值。 χ2=Ei(OiEi)2其中Oi是观察值,Ei是期望值。

简单的贪婪算法

用于从数据集中选择最重要的 K 个特征
用于减小数据集的维度,或者为了找出影响目标变量最多的特征。

在这里插入图片描述

  1. 顺序前进法(sequential forward selection,SFS)
    从零个特征开始,逐步添加最有价值的特征,直到特征数量达到预定的 K 个。在每一步,它都会考虑添加剩下的特征中对当前选中的特征集合增益最大的一个。
    算法步骤:
  2. 开始时,选定的特征集合为空。
  3. 对于每个未被选定的特征,评估将该特征添加到当前特征集合中后的模型性能。
  4. 选择使得模型性能提升最大的特征,并将其加入到特征集合中。
  5. 重复步骤 2 和 3,直到达到预定的特征数量 K。
    在这里插入图片描述
from mlxtend.feature_selection import SequentialFeatureSelector as SFS
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris

# 载入数据
iris = load_iris()
X = iris.data
y = iris.target

# K-近邻分类器
knn = KNeighborsClassifier(n_neighbors=3)

# 顺序前进法
sfs = SFS(knn, 
          k_features=3, 
          forward=True, 
          floating=False, 
          scoring='accuracy',
          cv=5)

# 进行特征选择
sfs = sfs.fit(X, y)

# 输出选定的特征
print('Selected features:', sfs.k_feature_idx_)

  1. 顺序后向选择(Sequential Backward Selection,SBS)
    它从所有特征开始,逐步移除最不重要的特征,直到剩下 K 个特征。在每一步,它都会考虑移除当前选中的特征集合中最不重要的一个。

算法步骤:

  1. 开始时,选定的特征集合包含所有特征。
  2. 对于每个已被选定的特征,评估从当前特征集合中移除该特征后的模型性能。
  3. 移除使得模型性能损失最小的特征。
  4. 重复步骤 2 和 3,直到特征集合中只剩下 K 个特征。
from mlxtend.feature_selection import SequentialFeatureSelector as SFS
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris

# 载入鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target

# 创建 K-近邻分类器实例
knn = KNeighborsClassifier(n_neighbors=3)

# 顺序后向选择
sbs = SFS(knn, 
          k_features=3,  # 指定选择的特征数量
          forward=False,  # 设置为后向选择
          floating=False, 
          scoring='accuracy',  # 使用准确度作为评估指标
          cv=5)  # 使用5折交叉验证

# 对数据集进行特征选择
sbs = sbs.fit(X, y)

# 打印选择的特征索引
print('Selected features:', sbs.k_feature_idx_)

在这里插入图片描述

主成分分析PCA

主成分分析(Principal Component Analysis,简称 PCA)是一种常用的数据降维技术,它通过线性变换将原始数据转换成一组各维度线性无关的表示,称为主成分。PCA 主要用于提取数据中的关键特征,降低数据维度,同时尽量保留原始数据的信息。

基本原理

PCA 通过寻找一个新的坐标系统,使得在这个新坐标系下,数据的方差最大化。在新坐标系下,第一个坐标(称为第一主成分)是原始数据方差最大的方向,第二个坐标(第二主成分)是与第一主成分正交且方差次大的方向,依此类推。这些主成分作为新的特征集,可以捕捉到数据中最重要的变异性。

基本步骤

  1. 数据标准化

    将数据进行中心化处理,使得每个特征的均值为0,即对于每个特征 x i x_i xi,进行转换 x i ′ = x i − x i ˉ x'_i = x_i - \bar{x_i} xi=xixiˉ,其中 x i ˉ \bar{x_i} xiˉ 是特征 x i x_i xi 的均值。

  2. 计算协方差矩阵

    协方差矩阵 C C C 可以表示为:

    C = 1 n − 1 × X T X C = \frac{1}{n-1} \times X^TX C=n11×XTX

    其中, X X X 是标准化后的数据矩阵, n n n 是样本数。

  3. 计算协方差矩阵的特征值和特征向量

    特征值和特征向量描述了数据的主要变化方向。特征向量 v v v 和对应的特征值 λ \lambda λ 满足:

    C v = λ v Cv = \lambda v Cv=λv

  4. 选择主成分

    选择 k k k 个最大的特征值对应的特征向量,形成一个转换矩阵 W W W

  5. 将数据转换到新的低维空间

    使用转换矩阵 W W W 将原始数据 X X X 映射到新的低维空间:

    Y = X W Y = XW Y=XW

    这里, Y Y Y 是映射后的低维数据。

应用

PCA 常用于特征提取、数据压缩、可视化等。它帮助去除数据中的冗余特征,同时保留最重要的信息。

线性判别分析 (LDA)

线性判别分析(Linear Discriminant Analysis,简称 LDA)是一种在统计学、模式识别和机器学习中用于分类和降维的方法。LDA 旨在找到一个线性组合的特征,使得不同类别的数据最大程度上可分。

基本原理

LDA 的主要思想是寻找一个线性投影,该投影能够将不同类别的样本投射到不同的位置,以最大化类间距离和最小化类内距离。

数学描述

假设有 n n n 维特征空间中的两个类别,每个类别中有多个样本。LDA 的目标是找到一个方向向量 w w w,使得将所有样本投射到这个方向上后,类间方差最大,而类内方差最小。

  1. 计算类内散度矩阵 S W S_W SW类间散度矩阵 S B S_B SB

    类内散度矩阵 S W S_W SW 是各个类别内部样本与各自类别均值的离差平方和:

    S W = ∑ i = 1 c ∑ x ∈ D i ( x − μ i ) ( x − μ i ) T S_W = \sum_{i=1}^{c} \sum_{x \in D_i} (x - \mu_i)(x - \mu_i)^T SW=i=1cxDi(xμi)(xμi)T

    其中, c c c 是类别数, D i D_i Di 是第 i i i 个类别的样本集, μ i \mu_i μi 是第 i i i 个类别的均值向量。

    类间散度矩阵 S B S_B SB 是不同类别的均值与总体均值的离差平方和:

    S B = ∑ i = 1 c n i ( μ i − μ ) ( μ i − μ ) T S_B = \sum_{i=1}^{c} n_i (\mu_i - \mu)(\mu_i - \mu)^T SB=i=1cni(μiμ)(μiμ)T

    其中, n i n_i ni 是第 i i i 个类别的样本数, μ \mu μ 是总体均值向量。

  2. 计算投影方向

    LDA 的目标是最大化类间散度矩阵和类内散度矩阵的比例。因此,求解的方向向量 w w w 满足:

    w = arg ⁡ max ⁡ w T S B w w T S W w w = \arg \max \frac{w^T S_B w}{w^T S_W w} w=argmaxwTSWwwTSBw

    这个问题可以通过求解广义特征值问题来解决:

    S B w = λ S W w S_B w = \lambda S_W w SBw=λSWw

  3. 数据投影

    通过计算得到的最优投影方向 w w w,可以将原始数据投影到新的低维空间:

    y = w T x y = w^T x y=wTx

    其中, x x x 是原始数据点, y y y 是投影后的数据点。

应用

LDA 常用于特征降维、分类等领域。它能够提取对分类最有用的特征,并在新的低维空间中保持类别之间的最大可分性。

Fisher Criterion(Fisher 判别准则)

Fisher Criterion,或称 Fisher 判别准则,是一种度量线性判别分析(LDA)中类别可分性的标准。它由统计学家和生物学家 Ronald Fisher 提出,主要用于分类任务中的特征选择和降维。

基本原理

Fisher 判别准则的基本思想是找到一个方向,使得在该方向上投影后,不同类别的数据最大程度地分离。具体来说,它旨在最大化类间距离,同时最小化类内差异。

数学描述

假设有两个类别,各自有多个样本,Fisher 判别准则的目标是找到一个方向向量 w w w,在这个方向上,两个类别的数据尽可能分开。

  1. 类内散度矩阵 S W S_W SW类间散度矩阵 S B S_B SB

    类内散度矩阵 S W S_W SW 表示各个类别内部样本的离差平方和:

    S W = ∑ i = 1 c ∑ x ∈ D i ( x − μ i ) ( x − μ i ) T S_W = \sum_{i=1}^{c} \sum_{x \in D_i} (x - \mu_i)(x - \mu_i)^T SW=i=1cxDi(xμi)(xμi)T

    类间散度矩阵 S B S_B SB 表示不同类别的均值与总体均值的离差平方和:

    S B = ∑ i = 1 c n i ( μ i − μ ) ( μ i − μ ) T S_B = \sum_{i=1}^{c} n_i (\mu_i - \mu)(\mu_i - \mu)^T SB=i=1cni(μiμ)(μiμ)T

  2. Fisher 判别准则

    Fisher 判别准则通过最大化下面的比值来找到最优的投影方向 w w w

    J ( w ) = w T S B w w T S W w J(w) = \frac{w^T S_B w}{w^T S_W w} J(w)=wTSWwwTSBw

    目标是最大化 J ( w ) J(w) J(w),即最大化类间距离和最小化类内差异。

  3. 求解投影方向

    通过求解广义特征值问题来找到最优的 w w w

    S B w = λ S W w S_B w = \lambda S_W w SBw=λSWw

  4. 数据投影

    使用计算得到的 w w w,将原始数据投影到新的方向:

    y = w T x y = w^T x y=wTx

    这里, x x x 是原始数据点, y y y 是投影后的数据点。

应用

Fisher 判别准则在特征选择、降维和模式识别等领域中有广泛应用。通过这种方式,可以有效地提取特征,使得分类任务的效果得到显著提升。

在这里插入图片描述

这个错误是由于无法连接到本地主机的10248端口导致的。这个端口通常是kubelet进程监听的端口,用于健康检查。出现这个错误可能是由于kubelet进程没有正确启动或者配置错误导致的。 解决这个问题的方法是检查kubelet进程的状态和配置。你可以按照以下步骤进行操作: 1. 检查kubelet进程是否正在运行。你可以使用以下命令检查kubelet进程的状态: ```shell systemctl status kubelet ``` 如果kubelet进程没有运行,你可以使用以下命令启动它: ```shell systemctl start kubelet ``` 2. 检查kubelet的配置文件。你可以使用以下命令查看kubelet的配置文件路径: ```shell kubelet --kubeconfig /etc/kubernetes/kubelet.conf --config /var/lib/kubelet/config.yaml --bootstrap-kubeconfig /etc/kubernetes/bootstrap-kubelet.conf config view ``` 确保配置文件中的端口号和地址正确,并且与你的环境相匹配。 3. 检查网络连接。你可以使用以下命令检查是否可以连接到localhost10248端口: ```shell curl -sSL http://localhost:10248/healthz ``` 如果无法连接,请确保端口没有被防火墙或其他网络配置阻止。 4. 检查docker的配置。有时候,kubelet进程依赖于docker进程。你可以按照以下步骤检查docker的配置: - 创建/etc/docker目录: ```shell sudo mkdir /etc/docker ``` - 编辑/etc/docker/daemon.json文件,并添加以下内容: ```json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ], "registry-mirrors": ["https://tdhp06eh.mirror.aliyuncs.com"] } ``` - 重启docker进程: ```shell systemctl restart docker ``` 请注意,以上步骤是一种常见的解决方法,但具体解决方法可能因环境而异。如果以上步骤无法解决问题,请提供更多的错误信息和环境配置,以便我们能够更好地帮助你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值