2023年深圳杯数学建模
A题 影响城市居民身体健康的因素分析
原题再现:
以心脑血管疾病、糖尿病、恶性肿瘤以及慢性阻塞性肺病为代表的慢性非传染性疾病(以下简称慢性病)已经成为影响我国居民身体健康的重要问题。随着人们生活方式的改变,慢性病的患病率持续攀升。众所周知,健康状况与年龄、饮食习惯、身体活动情况、职业等都有密切的关系。如何通过合理地安排膳食、适量的身体运动、践行健康的生活方式,从而达到促进身体健康的目的,这是全社会普遍关注的问题。附件A1是某市卫生健康研究部门对部分居民所做的“慢性非传染性疾病及其相关影响因素流行病学”调查问卷表,附件A2是相应的调查数据结果,附件A3是中国营养学会最新修订的《中国居民膳食指南》中为平衡居民膳食提出的八条准则。
请你们团队研究解决下面问题:
问题1 参考附件A3,分析附件A2中居民的饮食习惯的合理性,并说明存在的主要问题。
问题2 分析居民的生活习惯和饮食习惯是否与年龄、性别、婚姻状况、文化程度、职业等因素相关。
问题3 根据附件A2中的数据,深入分析常见慢性病(如高血压、糖尿病等)与吸烟、饮酒、饮食习惯、生活习惯、工作性质、运动等因素的关系以及相关程度。
问题4 依据附件A2中居民的具体情况,对居民进行合理分类,并针对各类人群提出有利于身体健康的膳食、运动等方面的合理建议。
做题前的分析
问题一
根据题中所给附件A3的居民饮食健康习惯的膳食八准则,将定性描述转化为定量分析,给出合理的健康评判模型,通过计算得出题中不满足建立的合理健康评判模型的数据,进而从多角度给出存在的不健康习惯问题所在。(这个的多角度请根据附件3详加考虑从哪些方面),以下为题中所给附件3。
问题二
题中问题二为影响生活习惯和饮食习惯的主要因素分析,这个没什么好说的。从8年前就来回问,真的无语了。
问题三
问题三就得结合附件1了,分析慢性病的成因,与平时的生活习惯和饮食习惯都怎样相互影响的。我对出题方再次表示无语,你就不能换一换花样?
问题四
问题四稍稍有点有监督学习的味道了,出题人故意这么设置的数据,由于原数据附件中数据量并不大,但是数据特征维度很大,导致读者分析数据时并不能够面面俱到所有的特征变量都分析到,这恰恰是出题人让你做的,有一些变量影响权重不大,且空值较多,占比较大,无法通过插值或均值、众多或其他方法填充,你如果非得要这些变量还单独考虑分析,不仅增大任务量,且无法得出有效规律,占比过少的数据,具有随机性和偶然性,得出的单一结论不仅没有严谨的数据依据作为支撑,更不能令评卷老师信服。因此,分析数据量较为完整的变量,剔除不必要的变量,这是首要。
其次,你要分析的是居民健康,那么你是不是应该看一下都哪些指标影响居民健康状况?先别着急写,看准F-健康状况,这个才是那个预测的类别也就是评判的标准,只不过F-健康状况是多个维度指标你要把多维度的映射到一个维度上,(注意好用词,是映射不是特征抽取)回过头来再从1生活习惯B-吸烟情况、C-饮酒情况,2饮食习惯D-饮食情况,3个人基本情况,三方面考虑综合分析,使用较高的**算法并按照你认为合理的数值界限对计算后的结果进行分类,并从生活习惯和饮食习惯给出良好的建议。
整体求解过程概述(摘要)
健康状况与年龄、饮食习惯、身体活动情况、职业等都有密切的关系。如何通过合理地安排膳食、适量的身体运动、践行健康的生活方式,从而达到促进身体健康的目的,这是全社会普遍关注的问题。因此,了解和分析影响城市居民身体健康的因素是很有必要的。
对于问题一:题目要求我们分析附件A2中居民的饮食习惯的合理性,并说明存在的主要问题。本文首先建立了基于Pearson相关系数和Wasserstein距离的数值量化方法针对选定的6个评价指标基于附件A3进行量化处理,其次,本文建立了主成分分析法模型用于确定6个评价指标的权重,最后,本文建立了多目标模糊综合评判模型得到了附件A2中居民针对6个评价指标的综合评判值(表2),通过综合评判值的大小来衡量饮食习惯的合理性,并分析了存在的主要问题(表3、表4、图3)。
对于问题二: 题目要求我们分析居民的生活习惯和饮食习惯是否与年龄、性别、婚姻状况、文化程度、职等因素相关。本文首先对生活习惯和饮食习惯两个指标的评价指标进行确定,其次针对对生活习惯有关数据进行量化处理,最后,本文利用生活习惯和饮食习惯和年龄、性别、婚姻状况、文化程度、职等因素的协方差矩阵和相关系数确定了其相关性及其相关程度(表5、表6)。
对于问题三: 本文首先对题目中提到的吸烟、饮酒、饮食习惯、生活习惯、工作性质、运动等因素建立了分值对称量化的量化方法,其次,本文建立了灰色关联分析法模型来得到常见慢性病与吸烟、饮酒、饮食习惯、生活习惯、工作性质、运动等因素的相关程度,最后,本文建立了二分类BP神经网络来表征常见慢性病与吸烟、饮酒、饮食习惯、生活习惯、工作性质、运动等因素的关系。
对于问题四: 题目要求根据附件A2中居民的具体情况,对居民进行合理分类,并针对各类人群提出有利于身体健康的膳食、运动等方面的合理建议。本文在问题三有无患病的基础上进行再分类,建立了两个二分类SVM模型将附件A2中居民分为四类,即患病但饮食健康、患病且饮食不健康、不患病且饮食健康、不患病但饮食不健康,基于四类居民的统计数据和特征,本文给出了合理的建议。
最后本文给出了模型的检验,即对二分类BP神经网络和主成分分析法进行灵敏度检验,如表10、表11所示。同时我们给出了模型的优缺点和推广。
模型假设:
为了使得问题更易于分析,我们做出以下合理假设:
假设对于本文一些无法得到精确解的复杂算法,假设由于其计算机结果而引起的误差可以忽略不计。
假设本文所提供的附件A2调查问卷结果数据真实可靠, 本文所搜集的数据、资料等较为可靠。
假设本文针对各项指标数据的量化方法在一定程度上较为准确,并且指标和指标之间独立。
问题分析:
本文首先对问题进行初步分析,如下:
对于问题一, 题目要求我们参考附件A3,分析附件A2中居民的饮食习惯的合理性,并说明存在的主要问题。本文考虑到饮食习惯的合理性评判标准(附件A3)有多方面,因此,本文首先选定几个评价指标,根据附件A3中的准则将评价指标进行量化,最后建立合理的数学模型综合几个评价指标的信息,得到附件A2中居民的饮食习惯的合理性分数并进一步的说明存在的主要问题。
对于问题二, 题目要求我们分析居民的生活习惯和饮食习惯是否与年龄、性别、婚姻状况、文化程度、职等因素相关。首先本文应当确定生活习惯和饮食习惯的范围,如生活习惯包括吸烟情况、饮酒情况和运动情况,饮食习惯包括饮食情况。同问题一相同将此类数据和问卷基本情况首先进行量化处理,然后使用相关性分方法得到生活习惯和饮食习惯是否与年龄、性别、婚姻状况、文化程度、职业等因素相关。
对于问题三,根据附件A2中的数据,深入分析常见慢性病(如高血压、糖尿病等)与吸烟、饮酒、饮食习惯、生活习惯、工作性质、运动等因素的关系以及相关程度。同上述两个问题一样,本文首先对慢性病(如高血压、糖尿病等)进行标签量化即是否得病,然后使用灰色关联分析法分析这些指标和是否患有慢性病的相关程度。为了得到这种关系,本文建立相关数学模型进行合理分类,从而用分类模型去表征这种关系。
对于问题四,依据附件A2中居民的具体情况,对居民进行合理分类,并针对各类人群提出有利于身体健康的膳食、运动等方面的合理建议。本文在前述三个问题的基础上,对附件A2中的量化数据进行分析,建立合理分类的分类数学模型,进一步对分类情况分析,从而针对各类人群提出有利于身体健康的膳食、运动等方面的合理建议。
模型的建立与求解整体论文缩略图
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
程序代码:
论文及程序仅供学习与参考
1. clc,clear
2. %a=load('1.txt');
3. a=a';
4.
5. [m,n]=size(a);
6. for i=1:n
7. a(:,i)=(a(:,i)-min(a(:,i)))/(max(a(:,i))-min(a(:,i))); %对原始数据进行归一化处理,值介于0-1之间
8. end
9.
10. w=[0.4,0.3,0.3];
11. w1=[0.30,0.25,0.20,0.25];
12. w2=[0.5,0.5];
13. b(1,:)=w1*a([1:4],:);
14. b(2,:)=w2*a(5,:);
15. c=w*b;
16. c=c';
1. import numpy as np
2. import tensorflow.keras as ka
3. import tensorflow as tf
4. import matplotlib.pyplot as plt
5. import datetime
6. from keras.utils.vis_utils import plot_model
7.
8. xy = np.loadtxt("3.txt",dtype=np.float32)
9. x_data = (xy[:, :-1])
10. y_data =(xy[:, [-1]])
11.
12. x_data = tf.convert_to_tensor(x_data)
13. y_data = tf.convert_to_tensor(y_data)
14. y_data = ka.utils.to_categorical(y_data) # 转化为独热编码
15.
16. # 多层全连接神经网络模型
17. model = ka.Sequential([
18. ka.layers.Dense(10, input_shape=(5,), activation='relu'),
19. ka.layers.Dropout(0.1),
20. ka.layers.Dense(50, activation='relu'),
21. ka.layers.Dense(100, activation='relu'),
22. ka.layers.Dense(50, activation='relu'),
23. ka.layers.Dense(10, activation='relu'),
24. ka.layers.Dense(2, activation='softmax')
25. ],'DNN')
26.
27. model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
28. model.fit(x_data, y_data, validation_split=0.2, epochs=10, batch_size=128, verbose=2,)
29.
30. plt.plot(model.history.history['loss'])
31. plt.plot(model.history.history['val_loss'])
32. plt.title('model loss')
33. plt.xlabel('epoch')
34. plt.ylabel('loss')
35. plt.legend(['train','val'],loc=1)
36. plt.show()
37.
38. plt.plot(model.history.history['accuracy'])
39. plt.plot(model.history.history['val_accuracy'])
40. plt.title('model accuracy')
41. plt.xlabel('epoch')
42. plt.ylabel('accuracy')
43. plt.legend(['train','val'],loc=1)
44. plt.show()
1. from sklearn import svm
2. import numpy as np
3. import matplotlib.pyplot as plt
4.
5. data=open("D:/VSCode/Task_python/sxjm/3.txt",'r+')
6. x=data[0]
7. y=data[1]
8. clf = svm.SVC(kernel='linear') # core
9. clf.fit(x, y)
10.
11. w = clf.coef_[0] # 获取w
12. a = -w[0] / w[1] # 斜率
13. # 画图划线
14. xx = np.linspace(-5, 5) # (-5,5)之间x的值
15. yy = a * xx - (clf.intercept_[0]) / w[1] # xx带入y,截距
16.
17. # 画出与点相切的线
18. b = clf.support_vectors_[0]
19. yy_down = a * xx + (b[1] - a * b[0])
20. b = clf.support_vectors_[-1]
21. yy_up = a * xx + (b[1] - a * b[0])
22.
23. print("W:", w)
24. print("a:", a)
25.
26. print("support_vectors_:", clf.support_vectors_)
27. print("clf.coef_:", clf.coef_)
28.
29. plt.figure(figsize=(8, 4))
30. plt.plot(xx, yy)
31. plt.plot(xx, yy_down)
32. plt.plot(xx, yy_up)
33. plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=80)
34. plt.scatter(x[:, 0], x[:, 1], c=y, cmap=plt.cm.Paired) # [:,0]列切片,第0列
35.
36. plt.axis('tight')
37. plt.savefig('photograph/svm.jpg')
38. plt.show()