基于隨機森林的糖尿病預測模型研究應用(python)

基于隨機森林的糖尿病預測模型研究應用

1、導入糖尿病數據集

In?[14]:

import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
data=pd.read_csv('./糖尿病數據集.csv',encoding="gbk")
data.head()#查看前五行數據

Out[14]:

PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcome
061487235033.60.627501
11856629026.60.351310
28183640023.30.672321
318966239428.10.167210
40137403516843.12.288331

In?[2]:

data.tail()

Out[2]:

PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcome
76310101764818032.90.171630
76421227027036.80.340270
7655121722311226.20.245300
7661126600030.10.349471
7671937031030.40.315230

2、糖尿病樣本統計分析

  • 提取進行樣本分析的特征

In?[2]:

##寫一個類方法做一個數據轉換操作,將1轉換成糖尿病患者,0轉換成正常人
data2=data.copy()
def tn_ftn(Outcome):if Outcome==1:return '糖尿病患者'else:return '正常人'
data2['result']=data2['Outcome'].apply(tn_ftn)##目標變量
y1=data2['result']
data2['age_groups'] = pd.cut(data2['Age'], bins=[0, 20, 40, 60,80,100],right=False)##分箱操作

In?[3]:

age_felie=data2.groupby(['age_groups','Outcome'])['result'].count().reset_index()
age_felie['age_groups']=['(0,20]正常人','(0,20]糖尿病患者','(20,40]正常人','(20,40]糖尿病患者','(40,60]正常人','(40,60]糖尿病患者','(60,80]正常人','(60,80]糖尿病患者','(80,100]正常人','(80,100]糖尿病患者']
age_felie

Out[3]:

age_groupsOutcomeresult
0(0,20]正常人00
1(0,20]糖尿病患者10
2(20,40]正常人0401
3(20,40]糖尿病患者1160
4(40,60]正常人076
5(40,60]糖尿病患者199
6(60,80]正常人022
7(60,80]糖尿病患者19
8(80,100]正常人01
9(80,100]糖尿病患者10

In?[4]:

fl=data2.groupby(['age_groups'])['Age'].count()
fl

Out[4]:

age_groups
[0, 20)        0
[20, 40)     561
[40, 60)     175
[60, 80)      31
[80, 100)      1
Name: Age, dtype: int64

In?[5]:

age_felie['age_groups']

Out[5]:

0        (0,20]正常人
1      (0,20]糖尿病患者
2       (20,40]正常人
3     (20,40]糖尿病患者
4       (40,60]正常人
5     (40,60]糖尿病患者
6       (60,80]正常人
7     (60,80]糖尿病患者
8      (80,100]正常人
9    (80,100]糖尿病患者
Name: age_groups, dtype: object
  • 一、糖尿病患者在各年齡階段的年齡占比

In?[14]:

from pyecharts.charts import Pie
from pyecharts import options as opts
# 繪制餅圖
pie = Pie()
pie.add("", [list(z) for z in zip(age_felie['age_groups'].values.tolist(), list(age_felie['result']))],radius=[20,200])
pie.set_global_opts(legend_opts=opts.LegendOpts(orient="vertical", pos_bottom="50%", pos_left="75%"))
pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{c} \n ({d}%)"))
pie.render('各年齡階段糖尿病患者人數.html')
# pie.render_notebook()

Out[14]:

 
  • 二、各年齡階段人數

In?[13]:

from pyecharts import options as opts
from pyecharts.charts import Bar# 假設age_felie已經定義并包含'age_groups'和'result'列
y_data = age_felie['result'].values
x_data = age_felie['age_groups'].values# 初始化圖表配置
init_opts = opts.InitOpts(width='1200px', height='800px')# 創建柱狀圖
bar = (Bar(init_opts).add_xaxis(x_data.tolist()).add_yaxis('糖尿病患者/正常人', y_data.tolist(), label_opts=opts.LabelOpts(position='insideTop')).set_global_opts(title_opts=opts.TitleOpts(title='各年齡階段人數'),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=20, color='skyblue')),yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=20, color='skyblue')))
)# 渲染到HTML文件
bar.render('各年齡階段人數.html')
# bar.render_notebook()

Out[13]:

 

3、查看數據的描述性信息及相關性

  • 數據的形狀

In?[15]:

data.shape

Out[15]:

(768, 9)
  • 數據的標簽

In?[16]:

# 查看標簽分布 
print("數據集一共多少條:",data.shape[0])
print("\n")
print("糖尿病數據標簽的分布:\n")
print(data.Outcome.value_counts()) ##0代表正常人,1代表患者人數
數據集一共多少條: 768糖尿病數據標簽的分布:0    500
1    268
Name: Outcome, dtype: int64
  • 描述信息

In?[17]:

data.describe().round(2)##保留兩位小數

Out[17]:

PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcome
count768.00768.00768.00768.00768.00768.00768.00768.00768.00
mean3.85120.8969.1120.5479.8031.990.4733.240.35
std3.3731.9719.3615.95115.247.880.3311.760.48
min0.000.000.000.000.000.000.0821.000.00
25%1.0099.0062.000.000.0027.300.2424.000.00
50%3.00117.0072.0023.0030.5032.000.3729.000.00
75%6.00140.2580.0032.00127.2536.600.6341.001.00
max17.00199.00122.0099.00846.0067.102.4281.001.00

In?[18]:

#相關性
data.corr().round(2)

Out[18]:

PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcome
Pregnancies1.000.130.14-0.08-0.070.02-0.030.540.22
Glucose0.131.000.150.060.330.220.140.260.47
BloodPressure0.140.151.000.210.090.280.040.240.07
SkinThickness-0.080.060.211.000.440.390.18-0.110.07
Insulin-0.070.330.090.441.000.200.19-0.040.13
BMI0.020.220.280.390.201.000.140.040.29
DiabetesPedigreeFunction-0.030.140.040.180.190.141.000.030.17
Age0.540.260.24-0.11-0.040.040.031.000.24
Outcome0.220.470.070.070.130.290.170.241.00

In?[19]:

#相關性熱力圖
#忽略警告
import warnings
warnings.filterwarnings('ignore')
import seaborn as sns
import matplotlib.pyplot as plt
sns.heatmap(data.corr(),cmap="Blues",annot=True)

Out[19]:

<Axes: >

4、數據預處理

  • 一、缺失值——均值填充

In?[20]:

#使用seaborn庫繪圖
import seaborn as sns
sns.set_style('whitegrid',{'font.sans-serif':['simhei','Arial']})
plt.figure(figsize=(30, 30))
g = sns.pairplot(data,x_vars=['Pregnancies','Glucose','BloodPressure','SkinThickness'],y_vars=['Age'],palette='Set1',hue='Outcome')
g = g.map_offdiag(plt.scatter)
plt.suptitle('各年齡階段的其他特征情況1', verticalalignment='bottom' , y=1,color="skyblue",size=20)
plt.show()#0為正常人,1為患有糖尿病
<Figure size 3000x3000 with 0 Axes>

In?[21]:

#使用seaborn庫繪圖
sns.set_style('whitegrid',{'font.sans-serif':['simhei','Arial']})
plt.figure(figsize=(30, 30))
g = sns.pairplot(data,x_vars=['Insulin','BMI','DiabetesPedigreeFunction'],y_vars=['Age'],palette='Set1',hue='Outcome')
g = g.map_offdiag(plt.scatter)
plt.suptitle('各年齡階段的其他特征情況2', verticalalignment='bottom' , y=1,color="skyblue",size=20)
plt.show()#0為正常人,1為患有糖尿病
<Figure size 3000x3000 with 0 Axes>

可以觀察到'Pregnancies','Glucose','BloodPressure','SkinThickness','Insulin','BMI'上都含有0值,

從現實的實際情況來說,'Pregnancies'列含有0值是正常的,那么我們將其他列含有的0值視為缺失值,現在進行轉換,

將'Glucose','BloodPressure','SkinThickness','Insulin','BMI'上所有列含有的0值填充為NaN值,進行查看空缺值

步驟:

1、缺失值檢查

2、填充缺失值

1、缺失值檢查

第一步:將Glucose、BloodPressure、SkinThickness、Insulin、BMI中的0替換成NaN值

第二步:使用data.info()檢查缺失值

第一步:將Glucose、BloodPressure、SkinThickness、Insulin、BMI中的0替換成NaN值

In?[15]:

column = ['Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI']
data[column] = data[column].replace(0,np.nan)

第二步:使用data.info()檢查缺失值

In?[23]:

data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 768 entries, 0 to 767
Data columns (total 9 columns):#   Column                    Non-Null Count  Dtype  
---  ------                    --------------  -----  0   Pregnancies               768 non-null    int64  1   Glucose                   763 non-null    float642   BloodPressure             733 non-null    float643   SkinThickness             541 non-null    float644   Insulin                   394 non-null    float645   BMI                       757 non-null    float646   DiabetesPedigreeFunction  768 non-null    float647   Age                       768 non-null    int64  8   Outcome                   768 non-null    int64  
dtypes: float64(6), int64(3)
memory usage: 54.1 KB

可以很清楚的觀察到糖尿病數據集中Glucose含有5條缺失值,BloodPressure含有35條缺失值,

SkinThickness含有227條缺失值,Insulin含有374條缺失值,BMI含有11條缺失值

即缺失值數據條數從多到少排序為:Insulin、SkinThickness、BloodPressure、BMI、Glucose

2、填充缺失值

填充原因:由上述的糖尿病數據相關性可知,目標變量與特征變量之間都存在一定的相關性,

故如果刪除缺失值的話,會可能導致統計效力下降,模型的準確性和泛化能力也會受到影響

In?[16]:

data['Glucose'].fillna(data.Glucose.mean().round(0),inplace=True)
data['BloodPressure'].fillna(data.BloodPressure.mean().round(0),inplace=True)
data['SkinThickness'].fillna(data.SkinThickness.mean().round(0),inplace=True)
data['Insulin'].fillna(data.Insulin.mean().round(0),inplace=True)
data['BMI'].fillna(data.BMI.mean().round(1),inplace=True)

In?[25]:

data.head()##查看填充成功

Out[25]:

PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcome
06148.072.035.0156.033.60.627501
1185.066.029.0156.026.60.351310
28183.064.029.0156.023.30.672321
3189.066.023.094.028.10.167210
40137.040.035.0168.043.12.288331
  • 二、異常值處理——中位數填充

由上述的描述信息可以看出Pregnancies、BloodPressure、Age這些值在實際生活中是正常的, 那么現在需要進行對Glucose、SkinThickness、Insulin、BMI、DiabetesPedigreeFunction進行異常排查

第一步:畫出需要分析列的箱線圖,即畫出糖尿病數據集中經過缺失值填充后Glucose、SkinThickness、Insulin、BMI、DiabetesPedigreeFunction列的箱線圖

第二步:利用z-score的方法找出異常值所在的行

第三步:采用中位數對異常進行填充

In?[26]:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns# 刪除指定的列
df = data.drop(['Pregnancies','BloodPressure','Age','Outcome'], axis=1)# 查看轉換后的DataFrame的數據類型
# print(df.dtypes)# 生成箱型圖
plt.figure(figsize=(15, 8))
sns.boxplot(data=df,orient= 'vertica')
plt.title('Box Plot of All Features')
plt.xlabel('Features')
plt.ylabel('Values')
#保存圖片
plt.savefig('糖尿病數據集缺失值處理后的箱線圖.png') 
plt.show()

①對Glucose列

In?[17]:

##對異常值進行足一排查
import pandas as pd
# 選擇要分析的列,Glucose——葡萄糖
column_to_analyze = 'Glucose'
# 計算該列的平均值和標準差
mean = data[column_to_analyze].mean()
std = data[column_to_analyze].std()
# 計算每個樣本的Z-score
data['z_score'] = (data[column_to_analyze] - mean) / std
# 設定一個閾值,通常選擇3作為標準,表示3個標準差之外的值為異常值
threshold = 3
# 識別異常值,即Z-score的絕對值大于閾值的樣本
data['is_outlier'] = abs(data['z_score']) > threshold
# 打印出異常值的行
print("Glucose異常值所在行:")
print(data[data['is_outlier']])
Glucose異常值所在行:
Empty DataFrame
Columns: [Pregnancies, Glucose, BloodPressure, SkinThickness, Insulin, BMI, DiabetesPedigreeFunction, Age, Outcome, z_score, is_outlier]
Index: []

可以看出Glucose無異常值

②對SkinThickness列

In?[18]:

##第一步:利用Z-Score進行異常值排查
import pandas as pd
import math 
# 選擇要分析的列,SkinThickness——皮脂厚度
column_to_analyze = 'SkinThickness'
# 計算該列的平均值和標準差
mean = data[column_to_analyze].mean()
std = data[column_to_analyze].std()
# 計算每個樣本的Z-score
data['z_score'] = (data[column_to_analyze] - mean) / std
# 設定一個閾值,通常選擇3作為標準,表示3個標準差之外的值為異常值
threshold = 3
# 識別異常值,即Z-score的絕對值大于閾值的樣本
data['is_outlier'] = abs(data['z_score']) > threshold
# 打印出異常值的行
print("SkinThickness異常值所在行:")
print(data[data['is_outlier']])
# 第二步:利用中位數填充異常值
## 使用中位數替換異常值
# 計算列的中位數
median_value = data[column_to_analyze].median()
# 使用中位數替換異常值
data.loc[data['is_outlier'], column_to_analyze] = median_value
SkinThickness異常值所在行:Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \
57             0    100.0           88.0           60.0    110.0  46.8   
120            0    162.0           76.0           56.0    100.0  53.2   
445            0    180.0           78.0           63.0     14.0  59.4   
579            2    197.0           70.0           99.0    156.0  34.7   DiabetesPedigreeFunction  Age  Outcome   z_score  is_outlier  
57                      0.962   31        0  3.513952        True  
120                     0.759   25        1  3.058952        True  
445                     2.420   25        1  3.855201        True  
579                     0.575   62        1  7.950196        True  

③對Insulin列

In?[19]:

import pandas as pd
# 選擇要分析的列,BloodPressure——血壓
column_to_analyze = 'Insulin'
# 計算該列的平均值和標準差
mean = data[column_to_analyze].mean()
std = data[column_to_analyze].std()
# # 使用math.floor()將均值向下取整為最接近的整數
# mean_value_int = math.floor(mean)
# 計算每個樣本的Z-score
data['z_score'] = (data[column_to_analyze] - mean) / std
# 設定一個閾值,通常選擇3作為標準,表示3個標準差之外的值為異常值
threshold = 3
# 識別異常值,即Z-score的絕對值大于閾值的樣本
data['is_outlier'] = abs(data['z_score']) > threshold# 打印出異常值的行
print("Insulin異常值所在行:")
print(data[data['is_outlier']])
# 計算列的中位數
median_value = data[column_to_analyze].median()
# 使用中位數替換異常值
data.loc[data['is_outlier'], column_to_analyze] = median_value
Insulin異常值所在行:Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \
8              2    197.0           70.0           45.0    543.0  30.5   
13             1    189.0           60.0           23.0    846.0  30.1   
111            8    155.0           62.0           26.0    495.0  34.0   
153            1    153.0           82.0           42.0    485.0  40.6   
186            8    181.0           68.0           36.0    495.0  30.1   
220            0    177.0           60.0           29.0    478.0  34.6   
228            4    197.0           70.0           39.0    744.0  36.7   
247            0    165.0           90.0           33.0    680.0  52.3   
286            5    155.0           84.0           44.0    545.0  38.7   
370            3    173.0           82.0           48.0    465.0  38.4   
392            1    131.0           64.0           14.0    415.0  23.7   
409            1    172.0           68.0           49.0    579.0  42.4   
415            3    173.0           84.0           33.0    474.0  35.7   
486            1    139.0           62.0           41.0    480.0  40.7   
584            8    124.0           76.0           24.0    600.0  28.7   
645            2    157.0           74.0           35.0    440.0  39.4   
655            2    155.0           52.0           27.0    540.0  38.7   
695            7    142.0           90.0           24.0    480.0  30.4   
753            0    181.0           88.0           44.0    510.0  43.3   DiabetesPedigreeFunction  Age  Outcome   z_score  is_outlier  
8                       0.158   53        1  4.554521        True  
13                      0.398   59        1  8.118329        True  
111                     0.543   46        1  3.989957        True  
153                     0.687   23        0  3.872340        True  
186                     0.615   60        1  3.989957        True  
220                     1.072   21        1  3.790007        True  
228                     2.329   31        0  6.918631        True  
247                     0.427   23        0  6.165880        True  
286                     0.619   34        0  4.578044        True  
370                     2.137   25        1  3.637105        True  
392                     0.389   21        0  3.049018        True  
409                     0.702   28        1  4.977944        True  
415                     0.258   22        1  3.742960        True  
486                     0.536   21        0  3.813531        True  
584                     0.687   52        1  5.224940        True  
645                     0.134   30        0  3.343061        True  
655                     0.240   25        1  4.519236        True  
695                     0.128   43        1  3.813531        True  
753                     0.222   26        1  4.166383        True  

④對BMI列

In?[20]:

import pandas as pd
import math
# 選擇要分析的列
column_to_analyze = 'BMI'
# 計算該列的平均值和標準差
mean = data[column_to_analyze].mean()
std = data[column_to_analyze].std()
# # 使用math.floor()將均值向下取整為最接近的整數
# mean_value_int = math.floor(mean)
# 計算每個樣本的Z-score
data['z_score'] = (data[column_to_analyze] - mean) / std
# 設定一個閾值,通常選擇3作為標準,表示3個標準差之外的值為異常值
threshold = 3
# 識別異常值,即Z-score的絕對值大于閾值的樣本
data['is_outlier'] = abs(data['z_score']) > threshold
# 打印出異常值的行
print("BMI異常值所在行:")
print(data[data['is_outlier']])
# 計算列的中位數
median_value = data[column_to_analyze].median()
# 使用中位數替換異常值
data.loc[data['is_outlier'], column_to_analyze] = median_value
BMI異常值所在行:Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \
120            0    162.0           76.0           29.0    100.0  53.2   
125            1     88.0           30.0           42.0     99.0  55.0   
177            0    129.0          110.0           46.0    130.0  67.1   
445            0    180.0           78.0           29.0     14.0  59.4   
673            3    123.0          100.0           35.0    240.0  57.3   DiabetesPedigreeFunction  Age  Outcome   z_score  is_outlier  
120                     0.759   25        1  3.016940        True  
125                     0.496   26        1  3.278753        True  
177                     0.319   26        1  5.038713        True  
445                     2.420   25        1  3.918738        True  
673                     0.880   22        0  3.613291        True  

⑤對DiabetesPedigreeFunction列

In?[21]:

import pandas as pd
# 選擇要分析的列,DiabetesPedigreeFunction——糖尿病遺傳函數
column_to_analyze = 'DiabetesPedigreeFunction'
# 計算該列的平均值和標準差
mean = data[column_to_analyze].mean()
std = data[column_to_analyze].std()
# # 使用math.floor()將均值向下取整為最接近的整數
# mean_value_int = math.floor(mean)
# 計算每個樣本的Z-score
data['z_score'] = (data[column_to_analyze] - mean) / std
# 設定一個閾值,通常選擇3作為標準,表示3個標準差之外的值為異常值
threshold = 3
# 識別異常值,即Z-score的絕對值大于閾值的樣本
data['is_outlier'] = abs(data['z_score']) > threshold
# 打印出異常值的行
print("DiabetesPedigreeFunction異常值所在行:")
print(data[data['is_outlier']])
# 計算列的中位數
median_value = data[column_to_analyze].median()
# 使用中位數替換異常值
data.loc[data['is_outlier'], column_to_analyze] = median_value
DiabetesPedigreeFunction異常值所在行:Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \
4              0    137.0           40.0           35.0    168.0  43.1   
45             0    180.0           66.0           39.0    156.0  42.0   
58             0    146.0           82.0           29.0    156.0  40.5   
228            4    197.0           70.0           39.0    156.0  36.7   
330            8    118.0           72.0           19.0    156.0  23.1   
370            3    173.0           82.0           48.0    156.0  38.4   
371            0    118.0           64.0           23.0     89.0  32.5   
395            2    127.0           58.0           24.0    275.0  27.7   
445            0    180.0           78.0           29.0     14.0  32.4   
593            2     82.0           52.0           22.0    115.0  28.5   
621            2     92.0           76.0           20.0    156.0  24.2   DiabetesPedigreeFunction  Age  Outcome   z_score  is_outlier  
4                       2.288   33        1  5.481337        True  
45                      1.893   25        1  4.289167        True  
58                      1.781   44        0  3.951134        True  
228                     2.329   31        0  5.605081        True  
330                     1.476   46        0  3.030598        True  
370                     2.137   25        1  5.025596        True  
371                     1.731   21        0  3.800226        True  
395                     1.600   25        0  3.404849        True  
445                     2.420   25        1  5.879733        True  
593                     1.699   25        0  3.703646        True  
621                     1.698   28        0  3.700627        True  
  • 數據預處理之后的描述信息

In?[34]:

data.drop(columns=['z_score']).describe().round(2)

Out[34]:

PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcome
count768.00768.00768.00768.0768.00768.00768.00768.00768.00
mean3.85121.6972.3928.9146.2232.290.4533.240.35
std3.3730.4412.108.256.276.530.2811.760.48
min0.0044.0024.007.014.0018.200.0821.000.00
25%1.0099.7564.0025.0121.5027.500.2424.000.00
50%3.00117.0072.0029.0156.0032.400.3729.000.00
75%6.00140.2580.0032.0156.0036.420.6041.001.00
max17.00199.00122.0054.0402.0052.901.4681.001.00

In?[35]:

data.head(10)

Out[35]:

PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcomez_scoreis_outlier
06148.072.035.0156.033.60.62705010.468187False
1185.066.029.0156.026.60.3510310-0.364823False
28183.064.029.0156.023.30.67203210.604004False
3189.066.023.094.028.10.1670210-0.920163False
40137.040.035.0168.043.10.37253315.481337True
55116.074.029.0156.025.60.2010300-0.817546False
6378.050.032.088.031.00.2480261-0.675693False
710115.072.029.0156.035.30.1340290-1.019762False
82197.070.045.0156.030.50.1580531-0.947326False
98125.096.029.0156.032.50.2320541-0.723983False

三、確定糖尿病數據集中的目標值與特征變量

  • 確定實驗二的目標變量與特征變量

In?[22]:

X=data.drop(columns=['Outcome','z_score','is_outlier'])##特征變量(刪除目標變量,其余的數據為特征變量)
y=data['Outcome']##目標變量 ----0為正常人,1為患有糖尿病

In?[23]:

X##特征變量

Out[23]:

PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAge
06148.072.035.0156.033.60.627050
1185.066.029.0156.026.60.351031
28183.064.029.0156.023.30.672032
3189.066.023.094.028.10.167021
40137.040.035.0168.043.10.372533
...........................
76310101.076.048.0180.032.90.171063
7642122.070.027.0156.036.80.340027
7655121.072.023.0112.026.20.245030
7661126.060.029.0156.030.10.349047
767193.070.031.0156.030.40.315023

768 rows × 8 columns

  • 確定實驗一的目標變量與特征變量

In?[24]:

##寫一個類方法做一個數據轉換操作,將1轉換成糖尿病患者,0轉換成正常人
data1=data
def tn_ftn(Outcome):if Outcome==1:return '糖尿病患者'else:return '正常人'
data1['result']=data1['Outcome'].apply(tn_ftn)##目標變量
y1=data1['result']

In?[25]:

X#特征變量

Out[25]:

PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAge
06148.072.035.0156.033.60.627050
1185.066.029.0156.026.60.351031
28183.064.029.0156.023.30.672032
3189.066.023.094.028.10.167021
40137.040.035.0168.043.10.372533
...........................
76310101.076.048.0180.032.90.171063
7642122.070.027.0156.036.80.340027
7655121.072.023.0112.026.20.245030
7661126.060.029.0156.030.10.349047
767193.070.031.0156.030.40.315023

768 rows × 8 columns

4、糖尿病數據預測模型

實驗一:

  • 測試數據

In?[40]:

##測試數據
data1.iloc[20:40,:].drop(columns=['Outcome','z_score','is_outlier'])

Out[40]:

PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeresult
203126.088.041.0235.039.30.70427正常人
21899.084.029.0156.035.40.38850正常人
227196.090.029.0156.039.80.45141糖尿病患者
239119.080.035.0156.029.00.26329糖尿病患者
2411143.094.033.0146.036.60.25451糖尿病患者
2510125.070.026.0115.031.10.20541糖尿病患者
267147.076.029.0156.039.40.25743糖尿病患者
27197.066.015.0140.023.20.48722正常人
2813145.082.019.0110.022.20.24557正常人
295117.092.029.0156.034.10.33738正常人
305109.075.026.0156.036.00.54660正常人
313158.076.036.0245.031.60.85128糖尿病患者
32388.058.011.054.024.80.26722正常人
33692.092.029.0156.019.90.18828正常人
3410122.078.031.0156.027.60.51245正常人
354103.060.033.0192.024.00.96633正常人
3611138.076.029.0156.033.20.42035正常人
379102.076.037.0156.032.90.66546糖尿病患者
38290.068.042.0156.038.20.50327糖尿病患者
394111.072.047.0207.037.11.39056糖尿病患者
  • 預測診斷結果

In?[15]:

import pandas as pd
##忽略警告
import warnings
warnings.filterwarnings('ignore')
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression      
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report,confusion_matrix,accuracy_score
import numpy as npdef lg_hgui():X_train,X_test,y_train,y_test=train_test_split(X,y1,test_size=0.3,random_state=25)lg=LogisticRegression(penalty='l2',max_iter=5)lg.fit(X_train,y_train)X_test1=data.iloc[20:40,:8]print("邏輯回歸預測結果:",lg.predict(X_test1))def jue_cs():X_train,X_test,y_train,y_test=train_test_split(X,y1,test_size=0.3,random_state=25)jcs=DecisionTreeClassifier(criterion='gini',max_depth=3,splitter='best')jcs.fit(X_train,y_train)X_test1=data.iloc[20:40,:8]print("決策樹預測結果:",jcs.predict(X_test1))def sj_sl():X_train,X_test,y_train,y_test=train_test_split(X,y1,test_size=0.3,random_state=25)sj=RandomForestClassifier(n_estimators=19,max_leaf_nodes=7,max_depth=4)sj.fit(X_train,y_train)X_test1=data.iloc[20:40,:8]print("隨機森林預測結果:",sj.predict(X_test1))def in_out():print("預測結果結束!")print("真實數據:",data.iloc[20:40,9:]['result'].values)   
print("\n")
while True:model=input("請輸入選擇的模型!- - - - - - - - - - - - - - - - - - -")if model == '邏輯回歸':lg_hgui()print("\n")elif model == '決策樹':jue_cs()print("\n")elif model=='隨機森林':sj_sl()else:print("\n")in_out()break
真實數據: ['正常人' '正常人' '糖尿病患者' '糖尿病患者' '糖尿病患者' '糖尿病患者' '糖尿病患者' '正常人' '正常人' '正常人''正常人' '糖尿病患者' '正常人' '正常人' '正常人' '正常人' '正常人' '糖尿病患者' '糖尿病患者' '糖尿病患者']
邏輯回歸預測結果: ['正常人' '正常人' '糖尿病患者' '正常人' '正常人' '正常人' '糖尿病患者' '正常人' '糖尿病患者' '正常人' '正常人''糖尿病患者' '正常人' '正常人' '正常人' '正常人' '正常人' '正常人' '正常人' '正常人']
決策樹預測結果: ['糖尿病患者' '正常人' '糖尿病患者' '正常人' '糖尿病患者' '糖尿病患者' '糖尿病患者' '正常人' '正常人' '正常人''正常人' '糖尿病患者' '正常人' '正常人' '正常人' '正常人' '糖尿病患者' '正常人' '正常人' '正常人']
隨機森林預測結果: ['正常人' '正常人' '糖尿病患者' '正常人' '糖尿病患者' '正常人' '糖尿病患者' '正常人' '正常人' '正常人' '正常人''糖尿病患者' '正常人' '正常人' '正常人' '正常人' '糖尿病患者' '糖尿病患者' '正常人' '正常人']
預測結果結束!

實驗二:

混淆矩陣、模型評估報告、準確率
  • 基于邏輯回歸模型糖尿病的預測模型

In?[1288]:

%%time
import pandas as pd
from sklearn import metrics
##忽略警告
import warnings
warnings.filterwarnings('ignore')
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression      
from sklearn.tree import DecisionTreeClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report,confusion_matrix,accuracy_score
from sklearn.model_selection import cross_val_score
import numpy as np
def lg_re():X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=25)sc = StandardScaler()X_train = sc.fit_transform(X_train)X_test = sc.transform(X_test)lg=LogisticRegression(penalty='l2',max_iter=5)lg.fit(X_train,y_train)y_predict=lg.predict(X_test)print('邏輯回歸混淆矩陣:')confusion_matrix=metrics.confusion_matrix(y_test,y_predict)plt.figure(figsize=(3, 3))# 設置x軸和y軸的刻度標簽heatmap = plt.imshow(confusion_matrix, cmap=plt.cm.Reds)# # 去掉網格線plt.grid(False)for i in range(confusion_matrix.shape[0]):for j in range(confusion_matrix.shape[1]):plt.text(j, i, format(confusion_matrix[i, j], 'd'), ha="center", va="center")plt.colorbar(heatmap)plt.xticks([0,1])plt.yticks([1,0])plt.xlabel('Predicted labels')plt.ylabel('True labels')plt.show()print("\n")print("邏輯回歸模型評估報告:")print(classification_report(y_test,y_predict))#模型評估報告print("\n")# print("邏輯回歸準確率:")print("邏輯回歸準確率:",accuracy_score(y_test,y_predict).round(2))#準確率score_tr=lg.score(X_train,y_train)score_te=lg.score(X_test,y_test)print("邏輯回歸模型訓練集準確率:",score_tr.round(2))print("邏輯回歸模型測試集準確率:",score_te.round(2))score_tc= cross_val_score(lg,X,y,cv=10,scoring = 'accuracy')#使用交叉驗證print("邏輯回歸十次交叉驗證準確率:",score_tc.round(2))
lg_re()##邏輯回歸模型的準確率約為0.82
邏輯回歸混淆矩陣:

邏輯回歸模型評估報告:precision    recall  f1-score   support0       0.86      0.88      0.87       1601       0.72      0.68      0.70        71accuracy                           0.82       231macro avg       0.79      0.78      0.78       231
weighted avg       0.82      0.82      0.82       231邏輯回歸準確率: 0.82
邏輯回歸模型訓練集準確率: 0.76
邏輯回歸模型測試集準確率: 0.82
邏輯回歸十次交叉驗證準確率: [0.69 0.69 0.68 0.62 0.69 0.77 0.7  0.73 0.71 0.66]
CPU times: total: 734 ms
Wall time: 720 ms
  • 基于決策樹模型糖尿病的預測模型

In?[818]:

%%time
from sklearn.tree import DecisionTreeClassifier
sc = StandardScaler()
X= sc.fit_transform(X)
def j_cs():X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=30)sc = StandardScaler()X_train = sc.fit_transform(X_train)X_test = sc.transform(X_test)clf=DecisionTreeClassifier(criterion='gini',max_depth=3,splitter='best')clf.fit(X_train,y_train)y_predict=clf.predict(X_test)print('決策樹混淆矩陣:')confusion_matrix=metrics.confusion_matrix(y_test,y_predict)plt.figure(figsize=(3, 3))# 設置x軸和y軸的刻度標簽heatmap = plt.imshow(confusion_matrix, cmap=plt.cm.Reds)for i in range(confusion_matrix.shape[0]):for j in range(confusion_matrix.shape[1]):plt.text(j, i, format(confusion_matrix[i, j], 'd'), ha="center", va="center")plt.colorbar(heatmap)# # 去掉網格線plt.grid(False)plt.xticks([0,1])plt.yticks([1,0])plt.xlabel('Predicted labels')plt.ylabel('True labels')plt.show()print("\n")print('決策樹模型評估報告:')print(classification_report(y_test,y_predict))print('\n')print('決策樹準確率:',accuracy_score(y_test,y_predict).round(2))print("決策樹模型訓練集準確率:",clf.score(X_train,y_train).round(2))print("決策樹模型測試集準確率:",clf.score(X_test,y_test).round(2))score_tc= cross_val_score(clf,X,y,cv=10,scoring = 'accuracy')#使用交叉驗證print("決策樹十次交叉驗證準確率:",score_tc.round(2))
j_cs()##決策樹模型的準確率約為0.78
決策樹混淆矩陣:

決策樹模型評估報告:precision    recall  f1-score   support0       0.82      0.89      0.85       1591       0.69      0.56      0.62        72accuracy                           0.78       231macro avg       0.75      0.72      0.73       231
weighted avg       0.78      0.78      0.78       231決策樹準確率: 0.78
決策樹模型訓練集準確率: 0.78
決策樹模型測試集準確率: 0.78
決策樹十次交叉驗證準確率: [0.73 0.73 0.74 0.68 0.71 0.75 0.71 0.81 0.71 0.78]
CPU times: total: 844 ms
Wall time: 839 ms
  • 基于隨機森林模型糖尿病的預測模型

In?[1280]:

%%time
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report,confusion_matrix,accuracy_score
from sklearn.model_selection import cross_val_score
def sj_sl():X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=25)sc = StandardScaler()X_train = sc.fit_transform(X_train)X_test = sc.transform(X_test)rfc=RandomForestClassifier(n_estimators=19,max_leaf_nodes=7,max_depth=4)rfc.fit(X_train,y_train)y_predict=rfc.predict(X_test)print('隨機森林混淆矩陣:')confusion_matrix=metrics.confusion_matrix(y_test,y_predict)plt.figure(figsize=(3, 3))# 設置x軸和y軸的刻度標簽heatmap = plt.imshow(confusion_matrix, cmap=plt.cm.Reds)for i in range(confusion_matrix.shape[0]):for j in range(confusion_matrix.shape[1]):plt.text(j, i, format(confusion_matrix[i, j], 'd'), ha="center", va="center")# # 去掉網格線plt.grid(False)plt.colorbar(heatmap)plt.xticks([0,1])plt.yticks([1,0])plt.xlabel('Predicted labels')plt.ylabel('True labels')plt.show()print('\n')print('隨機森林模型評估報告:')print(classification_report(y_test,y_predict))print('\n')print('隨機森林準確率:',accuracy_score(y_test,y_predict).round(2))print("隨機森林模型訓練集準確率:",rfc.score(X_train,y_train).round(2))print("隨機森林模型測試集準確率:",rfc.score(X_test,y_test).round(2))score_tc= cross_val_score(rfc,X,y,cv=10,scoring = 'accuracy')#使用交叉驗證print("隨機森林十次交叉驗證準確率:",score_tc.round(2))
sj_sl()##隨機森林模型的準確率約為0.84
隨機森林混淆矩陣:

隨機森林模型評估報告:precision    recall  f1-score   support0       0.87      0.90      0.88       1601       0.75      0.69      0.72        71accuracy                           0.84       231macro avg       0.81      0.80      0.80       231
weighted avg       0.83      0.84      0.83       231隨機森林準確率: 0.84
隨機森林模型訓練集準確率: 0.79
隨機森林模型測試集準確率: 0.84
隨機森林十次交叉驗證準確率: [0.73 0.73 0.75 0.64 0.73 0.78 0.78 0.78 0.7  0.82]
CPU times: total: 1.89 s
Wall time: 1.87 s
  • 邏輯回歸、決策樹、隨機森林十次驗證準確率

In?[191]:

##導包
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family'] = ['SimHei']   #設置字體為黑體
plt.rcParams['axes.unicode_minus'] = False #解決保存圖像時負號“-”顯示為方塊的問題
#由上述分別得到邏輯回歸、決策樹、隨機森林的十次交叉驗證準確率
##邏輯回歸十次交叉驗證準確率0.69 0.69 0.68 0.62 0.69 0.77 0.7  0.73 0.71 0.66
y1_Logistic=np.array([0.69,0.69,0.68,0.62,0.69,0.77,0.7,0.73,0.71,0.66]).tolist()
##決策樹十次交叉驗證準確率0.73 0.73 0.74 0.68 0.71 0.75 0.71 0.81 0.71 0.78
y2_Decision=np.array([0.73,0.73,0.74,0.68,0.71,0.75,0.71,0.81,0.71,0.78]).tolist()
##隨機森林十次交叉驗證準確率0.73,0.73,0.75,0.64,0.73,0.78,0.78,0.78,0.7,0.82
y3_Random=np.array([0.73,0.73,0.75,0.64,0.73,0.78,0.78,0.78,0.7,0.82]).tolist()
##因為是十次所以現在設置x軸時,要確定x軸的范圍是1~10
x_data=[1,2,3,4,5,6,7,8,9,10]
plt.plot(x_data,y1_Logistic,color="red" ,label="邏輯回歸")
plt.plot(x_data,y2_Decision,color="skyblue" ,label="決策樹")
plt.plot(x_data,y3_Random,color="blue" ,label="隨機森林")
plt.xticks(range(1,11))
plt.yticks([0.10,0.20,0.30,0.40,0.50,0.60,0.70,0.80,0.90,1.00])
plt.legend()
plt.xlabel("十次交叉驗證")
plt.ylabel("十次交叉驗證準確率")
plt.show()

  • 邏輯回歸準確率、決策樹準確率、隨機森林準確率柱形圖

In?[196]:

import seaborn as sns
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
plt.rcParams['font.sans-serif']='SimHei'# 用來正常顯示中文標簽
plt.rcParams['axes.unicode_minus']=False  # 用來正常顯示負號
import pandas as pd# 假設我們有一些數據
data = {'Model': ['邏輯回歸', '決策樹', '隨機森林'],'Value': [0.82, 0.78, 0.84]
}# 將數據轉換為Pandas DataFrame
df = pd.DataFrame(data)# 使用Seaborn的 barplot函數繪制柱形圖
# 在這里,我們不需要hue參數,因為我們只有一個分類變量
plt.figure(figsize=(8, 8))
sns.barplot(x='Model', y='Value', data=df)
# # 去掉網格線
plt.grid(False)
# 添加標題和軸標簽
plt.title('三種算法模型的準確率比較',fontsize=20,color="blue")
plt.xlabel('模型',fontsize=15,color="purple")
plt.ylabel('準確率',fontsize=15,color="purple")# 在每個柱子上方添加準確率數值
for i, v in enumerate(df['Value']):plt.text(i, v + 0.01, f"{v:.2f}", ha='center', va='bottom',bbox=dict(facecolor='skyblue', alpha=0.5))# 顯示圖表
plt.show()

In?[194]:

import seaborn as sns
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
plt.rcParams['font.sans-serif']='SimHei'# 用來正常顯示中文標簽
plt.rcParams['axes.unicode_minus']=False  # 用來正常顯示負號
import pandas as pd# 假設我們有一些數據
data = {'Model': ['邏輯回歸', '決策樹', '隨機森林'],'Value': [0.0996, 0.1385, 0.0952]
}# 將數據轉換為Pandas DataFrame
df = pd.DataFrame(data)# 使用Seaborn的 barplot函數繪制柱形圖
# 在這里,我們不需要hue參數,因為我們只有一個分類變量
plt.figure(figsize=(8, 8))
sns.barplot(x='Model', y='Value', data=df)
# # 去掉網格線
plt.grid(False)
# 添加標題和軸標簽
plt.title('混淆矩陣的假陰率比較',fontsize=20,color="blue")
plt.xlabel('模型',fontsize=15,color="purple")
# 在每個柱子上方添加準確率數值(百分比形式)
for i, v in enumerate(df['Value']):plt.text(i, v + 0.001, f"{v*100:.2f}%", ha='center', va='bottom',bbox=dict(facecolor='skyblue', alpha=0.5))  # 將浮點數轉換為百分比并保留一位小數
ax=plt.gca()
frame=plt.gca()
# y 軸不可見
frame.axes.get_yaxis().set_visible(False)
##去除x軸橫線
for spine in ax.spines.values():spine.set_visible(False)
plt.show()

數據集:該數據集最初來自美國國立糖尿病與消化與腎臟疾病研究所。在天池阿里云找到該數據集:https://tianchi.aliyun.com/dataset/88343。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79169.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79169.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79169.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Web應用服務器_Tomcat】二、Tomcat 核心配置與集群搭建

在企業級 Java Web 應用的部署場景中&#xff0c;Tomcat 作為主流的 Servlet 容器和 Web 服務器&#xff0c;其核心配置的優化以及集群搭建對于保障應用的高性能、高可用性至關重要。 一、Tomcat 核心配置優化? 1.1 server.xml 配置文件解析? Tomcat 的核心配置文件server…

Linux(文件管理)

文件命名規則 除了字符“/”之外&#xff0c;所以的字符都可以使用&#xff0c;但要注意&#xff0c;在目錄名或文件名中&#xff0c;不建議使用某些特殊字符&#xff0c;如&#xff1a;<、>、?、*等 如果一個文件名中包含了特殊字符&#xff0c;例如空格&#xff0c;那…

Windows服務器部署全攻略:Flask+Vue+MySQL跨平臺項目實戰(pymysql版)

當你的后端(Flask+pymysql,Windows開發)與前端(Vue,Mac開發)需要統一部署到Windows服務器時,通過「IIS反向代理+原生組件適配」方案可實現穩定交互。以下是針對Windows環境的專屬部署指南,解決路徑適配、服務啟動等核心問題。 一、Windows服務器環境準備(必做!) 1…

wpf 輸入框 在輸入時去除水印

wpf ScrollViewer 在輸入數據時去除水印 在WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;ScrollViewer控件通常用于顯示滾動內容。如果你想在ScrollViewer中使用數據輸入&#xff08;例如文本輸入&#xff09;&#xff0c;并且希望在輸入時去除水…

動態思維——AI與思維模型【91】

一、定義 動態思維思維模型是一種強調在思考問題和分析情況時&#xff0c;充分考慮到事物的變化性、發展性和相互關聯性&#xff0c;不局限于靜態的、孤立的視角&#xff0c;而是以發展變化的眼光看待事物&#xff0c;能夠根據不同時間、環境和條件的變化&#xff0c;靈活調整…

多模態大語言模型arxiv論文略讀(五十五)

MoMA: Multimodal LLM Adapter for Fast Personalized Image Generation ?? 論文標題&#xff1a;MoMA: Multimodal LLM Adapter for Fast Personalized Image Generation ?? 論文作者&#xff1a;Kunpeng Song, Yizhe Zhu, Bingchen Liu, Qing Yan, Ahmed Elgammal, Xiao…

Go-web開發之帖子功能

帖子功能 route.go r.Use(middleware.JWTAuthMiddleware()){r.POST("/post", controller.CreatePostHandler)r.GET("/post/:id", controller.GetPostDetailHandler)}post.go 定義帖子結構 type Post struct {Id int64 json:"id" …

C++ 項目中的多語言字符串管理方案(支持自動提示與動態加載)

&#x1f4ac; C 項目中的多語言字符串管理方案&#xff08;支持自動提示與動態加載&#xff09; 在中大型 C 應用中&#xff0c;我們常常會面臨界面提示文本繁多、需要支持多語言切換的問題。為了解決字符串管理混亂、缺乏自動提示、難以維護等問題&#xff0c;本文將提供一種…

數控滑臺:將制造業推向智能化的關鍵裝備

隨著制造業的不斷發展和智能化進程的加速推進&#xff0c;數控滑臺作為一種關鍵的裝備&#xff0c;在各種工業生產中發揮著越來越重要的作用。數控滑臺不僅提高了生產效率&#xff0c;節約了人力物力資源&#xff0c;還大大降低了生產過程中的錯誤率&#xff0c;保障了產品的質…

【STM32】定時器輸入捕獲

STM32 定時器輸入捕獲功能筆記 一、什么是輸入捕獲&#xff08;Input Capture&#xff09; 輸入捕獲是利用定時器的輸入通道&#xff0c;在檢測到信號電平變化&#xff08;如上升沿或下降沿&#xff09;時&#xff0c;立即將當前計數器的值捕獲并保存到捕獲寄存器&#xff08…

Qt通過QXlsx庫文件寫入到excl文件,讀取excl文件

第一&#xff1a;下載QXlsx庫文件 https://download.csdn.net/download/qq_32663053/90739425 第二&#xff1a;在Qt項目中引入QXlsx庫&#xff0c;需要把QXlsx庫文件放在項目文件夾下 第三&#xff1a;將tableview中的數據存入到excl文件 代碼&#xff1a; void MainWindow…

【KWDB 創作者計劃】一款面向 AIoT 的多模數據庫實戰體驗

一、KWDB&#xff1a;AIoT 時代的數據庫新選擇 KWDB 是由開放原子開源基金會孵化的分布式多模數據庫&#xff0c;專為物聯網、工業互聯網等場景設計。其核心價值在于時序與關系數據融合處理能力&#xff1a; ?多模統一引擎?&#xff1a;單個實例可同時建立時序庫&#xff08…

【教學類-102-22】蝴蝶彩色1——通義萬相“彩色蝴蝶”透明切邊基礎圖片制作(五款板式、批量下載、修圖、透明、切邊)

一、下載圖片 關鍵詞&#xff1a;卡通簡筆畫&#xff0c;白色背景&#xff0c;黑白輪廓線&#xff0c;、鮮艷&#xff0c;彩色&#xff0c;一只蝴蝶&#xff0c;簡單&#xff0c;可愛&#xff0c;矢量圖&#xff0c;大。 簡筆畫 強度1 4:3(長方形適配A4紙&#xff09; 五…

【JAVA】方法定義與重載:JVM方法調用機制(8)

核心知識點詳細解釋 Java方法的定義和使用 在Java中&#xff0c;方法是一段具有特定功能的代碼塊&#xff0c;它可以接受參數并返回一個值。方法的定義包括方法的修飾符、返回類型、方法名、參數列表和方法體。其基本語法如下&#xff1a; 修飾符 返回類型 方法名(參數列表)…

基于STM32的帶恒溫系統智能外賣柜設計

標題:基于STM32的帶恒溫系統智能外賣柜設計 內容:1.摘要 隨著外賣行業的迅速發展&#xff0c;對外賣存放設備的智能化和功能性要求日益提高。本設計的目的是開發一種基于STM32的帶恒溫系統智能外賣柜。方法上&#xff0c;以STM32微控制器為核心&#xff0c;結合溫度傳感器、加…

【綜述】相位解包裹算法對比分析

引言 相位解包裹是基于干涉的位相測量技術中的重要環節&#xff0c;如合成孔徑雷達干涉、光學干涉測量技術、醫學成像技術、數字全息三維成像、相干衍射成像等技術中都涉及位相解包裹。位相解包裹也稱為位相展開、位相解截斷、位相解纏繞等。與之相反的過程謂之包裹位相、截斷…

Rust 學習筆記:關于枚舉與模式匹配的練習題

Rust 學習筆記&#xff1a;關于枚舉與模式匹配的練習題 Rust 學習筆記&#xff1a;關于枚舉與模式匹配的練習題以下程序能否通過編譯&#xff1f;若能&#xff0c;輸出是什么&#xff1f;考慮這兩種表示結果類型的方式&#xff0c;若計算成功&#xff0c;則包含值 T&#xff1b…

C++負載均衡遠程調用學習之QPS性能測試

目錄 1.昨日回顧 2.QPS_TEST_PROTOBUF協議的集成 3.QPS_TEST_SERVER端實現 4.QPS_TEST_QPS簡單介紹 5.QPS_TEST_QPS客戶端工具編寫和性能測試 1.昨日回顧 2.QPS_TEST_PROTOBUF協議的集成 ## 14) Reactor框架QPS性能測試 ? 接下來我們寫一個測試用例來測一下我們…

【MySQL數據庫】視圖

1&#xff0c;視圖的基本介紹 視圖是一個虛擬表&#xff0c;其內容由查詢定義。與真實表一樣的是&#xff0c;視圖包含帶有名稱的列和行數據&#xff1b;與真實表不一樣的是&#xff0c;視圖本身并不在數據庫中存儲數據。視圖的數據變化會影響到基表&#xff0c;基表的數據變化…

Linux系統安裝方式+適合初學者的發行版本

Linux系統安裝方式適合初學者發行版—目錄 一、Linux系統的安裝方式1. 物理機直接安裝2. 虛擬機安裝3. 雙系統安裝4. Live USB試用5. 云服務器安裝 二、適合初學者的Linux發行版1. Ubuntu2. Linux Mint3. Zorin OS4. Pop!_OS5. Elementary OS6. Fedora7. Manjaro 三、選擇建議場…