华数杯第一题代码

%问题一 寻找 BS 并制作直方图
clc,clear;
file = dir('C:\Users\ASUS\Desktop\2024 年第五届“华数杯”全国大学生数学建模竞赛赛题\2024
年第五届“华数杯”全国大学生数学建模竞赛赛题\C 题\附件\*.csv');%读取所有此文件夹下的 txt 文件
*c*代表这类型
subfile_Num=length(file); %读取文件个数
FileNames = {file.name}'; %读取 file 中所有文件 形成元胞数组
n = size(FileNames,1); % CSV 文件的数量
for i = 1:n 
 name = FileNames{i};
 a{i}=readtable("C:\Users\ASUS\Desktop\2024 年第五届“华数杯”全国大学生数学
建模竞赛赛题\2024 年第五届“华数杯”全国大学生数学建模竞赛赛题\C 题\附件\" +
(name),'VariableNamingRule','preserve') % 导入数据
 a{i}.("评分") = string(a{i}.("评分"));
 a{i}.("评分") = double(a{i}.("评分"));
 a{i}.("建议季节") = string(a{i}.("建议季节"));
 a{i}.("小贴士") = string( a{i}.("小贴士"));
 a{i}.("地址") = string(a{i}.("地址"));
 a{i}.("名字") = string(a{i}.("名字"));
 a{i}.("链接") = string(a{i}.("链接"));
 a{i}.("开放时间") = string(a{i}.("开放时间"));
 a{i}.("图片链接") = string(a{i}.("图片链接"));
 a{i}.("介绍") = string(a{i}.("介绍"));
 a{i}.("建议游玩时间") = string(a{i}.("建议游玩时间"));
 a{i}.("门票") = string(a{i}.("门票"));
 a{i}.("名字") = string(a{i}.("名字"));
 if i == 1
 joinedtable = a{i};
 else joinedtable = vertcat(a{i}, joinedtable);
 end
end
% 导出为 Excel 文件,如果需要特定的工作簿名称,可以指定 sheetName
% writetable(joinedtable, 'joinedtable.xlsx');
% 利用 excel 删除名字和评分都相同的数据
data = 
readtable("C:\Users\ASUS\Desktop\joinedtable.xlsx",'VariableNamingRule','preserve')
%data 是删除了名字与评分都重复的数据
data1 = 
readtable("C:\Users\ASUS\Desktop\hebing.xlsx",'Sheet',1,'VariableNamingRule','preser
ve')
%data1 是删除了总和中城市和名字都重复的数据
% 天护陀罗尼经幢 Tianhu Dharani Building 删除了特殊字符
1
city_name = unique(data1.("Source.Name"))
for i= 1:352
 city_name{i,1};
 data1.("评分") = double(data1.("评分"));
m3= find(contains(data1.("Source.Name"),city_name{i,1}));
n3 = max(data1.("评分")(m3));warning off;
data1.("评分") = string(data1.("评分"));
pingfen = data1.("评分")(m3);
m4 = strcmp(pingfen , string(n3)); % 返回 {[1], [], []}
m5= find(m4 ==1);
city_name{i,2} = string(n3);
city_name{i,3} = data1.("名字") (m5);
city_name{i,4} = data1.("门票")(m5);
city_name{i,5} = data1.("建议游玩时间") (m5);
end
clear("city")
n1 = find(data.("评分") ==5)
bsspot = data.("名字")(n1,1);
bsspot = unique(bsspot)
for i= 1:2392
m = strcmp(data1.("名字"),bsspot{i});
n2 = max(size(unique(data1.("Source.Name")(m))));
city(i,1:n2) = unique(data1.("Source.Name")(m));
end
city_array = reshape(city,[],1)
city_array = city_array(~cellfun('isempty', city_array));
final = tabulate(city_array )
final = cell2table(final)
final.final1 = string(final.final1)
final.final1 = cellstr(final.final1)
bar(table2array(final(:,1)),table2array(final(:,2)))
final1 = string(final.final1)
% 计算数据的索引并排序
[sortedData, sortOrder] = sort(table2array(final(:,2)), 'descend');
% 创建条形图
figure;
bar(sortedData);
final1(sortOrder)
% 根据排序后的索引调整 X 轴的标签
set(gca, 'xtick', 1:length(final1), 'xticklabel',final1(sortOrder));
2
set(gca,'FontName', '黑体','FontSize',5)
set(gca,'XTickLabelRotation',46);%46 是字体的旋转角度
% 添加标题和轴标签
title('Sorted Bar Chart by City');
xlabel('City');
ylabel('Value');
a = [final1(sortOrder),sortedData]

### 关于2021年数杯C第一的解思路 #### 目背景概述 根据已知的信息,2021年“数杯”C涉及客户购车可能性预测。具体来说,目提供了关于客户的若干特征变量(如`a1`至`a8`),并要求基于这些数据构建模型来评估每位客户的购车概率[^3]。 --- #### 数据预处理阶段 为了提高后续建模的效果,在正式建立模型之前需完成一系列的数据预处理操作: - **离散化处理** 将连续型变量转化为离散形式以便更好地捕捉其分布特性。例如,可以依据品牌类别将原始数据划分为三个子集——品牌1、品牌2以及品牌3[^3]。 - **样本平衡调整** 使用诸如SMOTE(Synthetic Minority Over-sampling Technique)这样的技术解决正负样本比例失衡的。由于实际场景下可能仅有一部分客户最终会购买车辆而导致目标标签呈现显著倾斜现象,因此有必要通过合成新实例扩充少数类别的规模从而提升整体学习性能。 - **维度缩减方法应用** 主成分分析法(PCA, Principal Component Analysis)被推荐用于降低输入空间复杂度的同时保留尽可能多的有效信息量。这一步骤有助于缓解高维灾难效应并且加速收敛过程。 --- #### 建立预测模型 经过上述准备之后即可着手搭建适合当前任务需求的机器学习框架。以下是主要步骤说明: - **选用BP神经网络架构** BP (Back Propagation) 网络因其强大的非线性映射能力成为本案例的理想候选者之一。它能够自动提取隐藏层节点间复杂的相互关系进而实现精准分类目的[^3]。 - **定义损失函数与优化策略** 设置合理的代价衡量指标比如交叉熵误差作为指导方向;同时搭配高效梯度下降变种算法例如AdamOptimizer调节权重参数直至达到全局最优状态或者满足停止条件为止[^2]。 下面给出一段简化版Python代码片段展示如何初始化这样一个基本结构: ```python import tensorflow as tf from sklearn.preprocessing import StandardScaler from imblearn.over_sampling import SMOTE # 假设X_train为训练集特征,Y_train为目标向量 smote = SMOTE(random_state=42) X_resampled, Y_resampled = smote.fit_resample(X_train, Y_train) scaler = StandardScaler() X_scaled = scaler.fit_transform(X_resampled) model = tf.keras.Sequential([ tf.keras.layers.Dense(units=16, activation='relu', input_shape=(X_scaled.shape[1],)), tf.keras.layers.Dense(units=8, activation='relu'), tf.keras.layers.Dense(units=1, activation='sigmoid') ]) model.compile(optimizer=tf.optimizers.Adam(), loss='binary_crossentropy', metrics=['accuracy']) history = model.fit(X_scaled, Y_resampled, epochs=50, batch_size=32, validation_split=0.2) ``` 以上脚本涵盖了从重采样到标准化再到最后编译执行整个流程的核心要素[^2]。 --- #### 结果解释与验证 完成训练环节后还需要进一步检验所得结论可靠性。通常采用混淆矩阵、ROC曲线图等形式直观展现各类别识别精度水平,并据此作出相应改进措施如果必要的话。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值