1、银行的贷款部门需要判别每个客户的信用好坏(是否未履行还贷责任),以决定是否给予贷款。可以根据贷款申请人的年龄(X1)、受教育程度(X2)、现在所从事工作的年数(X3)、未变更住址的年数(X4)、收入(X5)、负债收入比例(X6)、信用卡债务(X7)、其它债务(X8)等来判断其信用情况。下表是从某银行的客户资料中抽取的部分数据,和某客户的如上情况资料为(53,1,9,18,50,11.20,2.02,3.58),根据样本资料分别用马氏距离判别法、线性判别法、二次判别法对其进行信用好坏的判别。
目前信用好坏 | 客户序号 | X1 | X2 | X3 | X4 | X5 | X6 | X7 | X8 |
---|---|---|---|---|---|---|---|---|---|
已履行还贷责任 | 1 | 23 | 1 | 7 | 2 | 31 | 6.60 | 0.34 | 1.71 |
2 | 34 | 1 | 17 | 3 | 59 | 8.00 | 1.81 | 2.91 | |
3 | 42 | 2 | 7 | 23 | 41 | 4.60 | 0.94 | .94 | |
4 | 39 | 1 | 19 | 5 | 48 | 13.10 | 1.93 | 4.36 | |
5 | 35 | 1 | 9 | 1 | 34 | 5.00 | 0.40 | 1.30 | |
未履行还贷责任 | 6 | 37 | 1 | 1 | 3 | 24 | 15.10 | 1.80 | 1.82 |
7 | 29 | 1 | 13 | 1 | 42 | 7.40 | 1.46 | 1.65 | |
8 | 32 | 2 | 11 | 6 | 75 | 23.30 | 7.76 | 9.72 | |
9 | 28 | 2 | 2 | 3 | 23 | 6.40 | 0.19 | 1.29 | |
10 | 26 | 1 | 4 | 3 | 27 | 10.50 | 2.47 | .36 |
% 样本数据
X = [
23 1 7 2 31 6.60 0.34 1.71;
34 1 17 3 59 8.00 1.81 2.91;
42 2 7 23 41 4.60 0.94 0.94;
39 1 19 5 48 13.10 1.93 4.36;
35 1 9 1 34 5.00 0.40 1.30;
37 1 1 3 24 15.10 1.80 1.82;
29 1 13 1 42 7.40 1.46 1.65;
32 2 11 6 75 23.30 7.76 9.72;
28 2 2 3 23 6.40 0.19 1.29;
26 1 4 3 27 10.50 2.47 0.36
];
% 目标变量
Y = [0; 0; 0; 0; 0; 1; 1; 1; 1; 1]; % 0表示已履行还贷责任,1表示未履行还贷责任
% 新客户数据
new_customer = [53, 1, 9, 18, 50, 11.20, 2.02, 3.58];
% 马氏距离判别法
mahal_dist = mahal(X, X);
[~, idx] = min(mahal(new_customer, X));
if Y(idx) == 0
disp('客户信用良好(已履行还贷责任)');
else
disp('客户信用较差(未履行还贷责任)');
end
% 线性判别法
lda_model = fitcdiscr(X, Y);
predicted_class_lda = predict(lda_model, new_customer);
if predicted_class_lda == 0
disp('客户信用良好(已履行还贷责任)');
else
disp('客户信用较差(未履行还贷责任)');
end
2、请利用Matlab自带的鸢尾花数据集完成以下任务:
(1)导入数据(以下2种方法均可);
load fisheriris
[X,T] = iris_dataset
(2)将每类鸢尾花的数据按8:2随机划分为训练集和测试集;
(3)利用线性判别法对测试集中的样本进行预测,并计算预测准确率;
(4)利用k近邻算法对测试集中的样本进行预测,并计算预测准确率。
% 导入数据
load fisheriris
X = meas; % 特征数据
T = species; % 目标变量
% 将每类鸢尾花的数据按8:2随机划分为训练集和测试集
rng(1); % 设置随机种子以确保结果的可重复性
cv = cvpartition(T,'Holdout',0.2); % 创建一个保留测试集的分区
X_train = X(training(cv),:); % 训练集特征
T_train = T(training(cv)); % 训练集目标
X_test = X(test(cv),:); % 测试集特征
T_test = T(test(cv)); % 测试集目标
% 利用线性判别法对测试集中的样本进行预测,并计算预测准确率
lda_model = fitcdiscr(X_train, T_train); % 训练线性判别模型
predicted_lda = predict(lda_model, X_test); % 预测测试集样本
accuracy_lda = sum(strcmp(predicted_lda, T_test)) / numel(T_test); % 计算准确率
% 利用k近邻算法对测试集中的样本进行预测,并计算预测准确率
knn_model = fitcknn(X_train, T_train); % 训练k近邻模型
predicted_knn = predict(knn_model, X_test); % 预测测试集样本
accuracy_knn = sum(strcmp(predicted_knn, T_test)) / numel(T_test); % 计算准确率
% 输出结果
disp(['线性判别法预测准确率:', num2str(accuracy_lda)]);
disp(['k近邻算法预测准确率:', num2str(accuracy_knn)]);
3、使用KNN进行水果分类
在水果自动分类系统中,对于待处理的目标,智能设备需要对测量得到的数据(如颜色、重量、尺寸等)进行处理,自动判别出目标的类别。
水果数据集由爱丁堡大学的Iain Murray博士创建。他买了几十个不同种类的橘子、橙子、柠檬和苹果,并把它们的尺寸记录在一张表格中。
本实验对水果数据进行了简单预处理,存为素材文件fruit_data.txt。文件中包含59个水果的测量数据。每行表示一个水果样例,每列为一个特征。特征从左到右依次如下。
fruit_label: 标记值,表示水果的类别,1-苹果,2-橘子,3-橙子,4-柠檬
mass:水果的重量
width:水果的宽度
height:水果的高度
color_score:颜色值
请使用线性判别法、KNN算法预测下表中A、B两种水果的类别。
样本 | mass | width | height | color_score |
---|---|---|---|---|
A | 192 | 8.4 | 7.3 | 0.55 |
B | 200 | 7.3 | 10.5 | 0.72 |
% 读取水果数据集
data = readtable('fruit_data.txt', 'HeaderLines', 1); % 从第二行开始读取数据,因为第一行是列名
X = data(:,2:5); % 特征数据
Y = data.Var1; % 目标变量
% 使用KNN算法进行分类
knn_model = fitcknn(X, Y, 'NumNeighbors', 5); % 使用5个最近邻居
new_samples = [192, 8.4, 7.3, 0.55; 200, 7.3, 10.5, 0.72]; % 待分类的样本
predicted_labels = predict(knn_model, new_samples);
% 显示预测结果
disp('预测结果:');
for i = 1:size(new_samples, 1)
disp(['样本', char(64+i), ' 的类别预测为 ', num2str(predicted_labels(i))]);
end