clc; close all; clear all; % 读取原始数据 data0 = xlsread('C:\Users\Lenovo\Desktop\数据信噪比2.xlsx','A2:A78126'); % 读取原始数据 data = xlsread('C:\Users\Lenovo\Desktop\数据信噪比2.xlsx','B2:B78126'); % 读取原始数据 % 提取特征 X = data(:, 1); % 归一化处理 X_norm = (X - mean(X)) ./ std(X); % 计算距离矩阵 D = pdist2(X_norm, X_norm); % 设定K值 K = 8; % 计算K个邻居的距离 [~, idx] = sort(D); K_nearest = idx(2:K+1, :); K_distance = D(sub2ind(size(D), repmat(1:size(D,1), K, 1), K_nearest)); % 计算平均距离 mean_distance = mean(K_distance); % 计算离群分数 outlier_score = sum(K_distance > mean_distance, 1)'; % 设定阈值 threshold = 5; % 确定离群点 outliers = find(outlier_score > threshold); % 显示离群点的行号 disp('离群点的行号:'); disp(outliers); % 可视化原始数据和离群点 figure; scatter(data0, X(:,1), 'filled'); hold on; scatter(data0(outliers), X(outliers,1), 'r', 'filled'); xlabel('X'); title('Outlier Detection by KNN'); legend('原始数据', '离群点');
时间: 2024-03-15 11:44:53 浏览: 77
hy-1c数据读取.docx
在上述代码中,离群点的行号已经被存储在名为`outliers`的变量中。如果您想将这些行号放进一个矩阵里,可以使用以下代码:
```
outliers_matrix = zeros(length(outliers), 1);
for i = 1:length(outliers)
outliers_matrix(i) = outliers(i);
end
```
这将创建一个列向量`outliers_matrix`,其中包含了所有离群点的行号。
阅读全文