第十四周_数学建模

第十四周_数学建模

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

你可能感兴趣的:(数学建模)