%% 对原始数据进行随机过采样
% 假设原始数据存储在一个名为data的矩阵中,每一行代表一个样本,最后一列代表样本的类别标签
% 计算每个类别的样本数量
unique_labels = unique(data(:, end));
num_classes = numel(unique_labels);
class_counts = histcounts(data(:, end), [unique_labels; max(unique_labels)+1]);
% 获取每个类别样本数量最多的数量
max_count = max(class_counts);
% 创建一个空矩阵,用于存储过采样后的数据
oversampled_data = [];
% 对每个类别进行过采样
for i = 1:num_classes
% 提取当前类别的样本
class_data = data(data(:, end) == unique_labels(i), :);
% 计算需要过采样的数量
num_oversample = max_count - class_counts(i);
% 随机重复抽样,过采样,直到达到目标数量
oversampled_samples = randsample(size(class_data, 1), num_oversample, true);
oversampled_class_data = class_data(oversampled_samples, :);
% 将过采样后的样本添加到结果中
oversampled_data = [oversampled_data; class_data; oversampled_class_data];
end
data=[oversampled_data(:,1:8);x_vali]
%% 对原始数据中的定类数据进行标签编码
% 原始定类数据
data = {'A'; 'B'; 'C'; 'A'; 'C'; 'B'; 'B'};
% 标签编码
encoded_data = grp2idx(data);
% 输出结果
disp(encoded_data);
%% 对原始数据中的定类数据进行独热编码
% 假设原始数据存储在一个名为data的矩阵中,每一行代表一个样本,每一列代表一个特征
% 假设需要对第三列进行独热编码
feature_column = 3;
% 提取需要进行独热编码的特征列
feature_data = data(:, feature_column);
% 获取特征列的取值范围
unique_values = unique(feature_data);
% 创建一个全零的矩阵,用于存储独热编码后的结果
one_hot_encoded = zeros(size(data, 1), numel(unique_values));
% 对每个样本进行独热编码
for i = 1:size(data, 1)
value = feature_data(i);
% 确定当前取值在unique_values中的索引
index = find(unique_values == value);
% 将对应位置设置为1
one_hot_encoded(i, index) = 1;
end
% 将原始数据和独热编码结果合并在一起
data_with_one_hot = [data(:, 1:feature_column-1) one_hot_encoded data(:, feature_column+1:end)];
%% 对定量数据进行标准化
data_num=[data_with_one_hot(:,1:2),data_with_one_hot(:,8:12)]
% 假设原始数据存储在一个名为data的矩阵中,每一行代表一个样本,每一列代表一个特征
% 计算每个特征的均值和标准差
mean_values = mean(data_num);
std_values = std(data_num);
% 进行标准化
normalized_data = (data_num - mean_values) ./ std_values;
%% 数据预处理结束获得训练数据
data=[normalized_data(1:660,1:2),data_with_one_hot(1:660,3:7),normalized_data(1:660,3:7),oversampled_data(1:660,9)]
x_vali=[normalized_data(661:680,1:2),data_with_one_hot(661:680,3:7),normalized_data(661:680,3:7)]
%% 划分数据集
% 加载数据集
X = data(:,1:12); % 特征矩阵
y = data(:,13); % 标签向量
% 随机划分训练集和测试集
trainRatio = 0.7; % 训练集比例
testRatio = 0.3; % 测试集比例
% 随机划分
[trainInd,testInd] = dividerand(size(X,1), trainRatio, testRatio);
% 训练集
X_train = X(trainInd,:);
y_train = y(trainInd);
% 测试集
X_test = X(testInd,:);
y_test = y(testInd);
数据预处理(随机过采样、标签编码、独热编码、随机划分数据集、标准化)
需积分: 0 153 浏览量
更新于2024-12-01
收藏 2KB ZIP 举报
数据预处理是机器学习中不可或缺的一步,用于提高模型性能和训练效率。以下是常用的预处理方法:
随机过采样(Random Oversampling)
对于类别不平衡的数据集,通过复制少数类样本来平衡类别分布,避免模型偏向多数类。此方法简单高效,但可能导致过拟合。
标签编码(Label Encoding)
将类别型变量转化为整数编码,例如将分类变量 {'cat', 'dog', 'fish'} 转换为 {0, 1, 2}。适用于有序分类变量,但对无序类别可能引入隐含顺序。
独热编码(One-Hot Encoding)
将类别型变量转换为二进制矩阵,每种类别用一个独立的向量表示。例如,{'cat', 'dog', 'fish'} 转换为 [[1, 0, 0], [0, 1, 0], [0, 0, 1]],消除类别间的序数关系,适用于无序分类变量。
随机划分数据集(Random Data Splitting)
将数据集随机分为训练集、验证集和测试集(例如 70%:15%:15%),确保每部分样本分布一致,为模型训练和评估提供基础。
AIDog
- 粉丝: 3533
- 资源: 86
最新资源
- 【岗位说明】校长岗位说明书.docx
- 【岗位说明】培训机构老师日常工作职责.docx
- 【岗位说明】培训机构咨询师工作岗位职责.docx
- 【岗位说明】幼儿园各岗位职责01.docx
- 【岗位说明】幼儿园各岗位职责分工.docx
- 【岗位说明】执行管理园长岗位职责说明书.docx
- 【岗位说明】XX药房岗位职责.doc
- 【岗位说明】XX制药厂岗位说明书大全设备部员工岗位职责.doc
- 【岗位说明】XX制药厂岗位说明书大全QC员岗位责任.doc
- 【岗位说明】XX制药厂岗位说明书大全制药厂厂长岗位职责.doc
- 【岗位说明】XX制药厂岗位说明书大全制药厂副厂长岗位职责.doc
- 【岗位说明】XX制药厂岗位说明书大全生产班组长岗位职责.doc
- 【岗位说明】护士岗位说明书.doc
- 【岗位说明】保健食品岗位职责.doc
- 【岗位说明】副主任药师岗位说明书.doc
- 【岗位说明】理疗师岗位职责.doc