首页 > 其他分享 >R语言航班延误影响预测分析:lasso、决策树、朴素贝叶斯、QDA、LDA、缺失值处理、k折交叉验证

R语言航班延误影响预测分析:lasso、决策树、朴素贝叶斯、QDA、LDA、缺失值处理、k折交叉验证

时间:2024-01-23 15:22:32浏览次数:20  
标签:LDA QDA ## 模型 lda 决策树 th accuracy lasso

全文链接:http://tecdat.cn/?p=32760

原文出处:拓端数据部落公众号

航班延误是航空公司、旅客和机场管理方面都面临的一个重要问题。航班延误不仅会给旅客带来不便,还会对航空公司和机场的运营产生负面影响。因此,对航班延误的影响因素进行预测分析,对于航空公司、旅客和机场管理方面都具有重要意义。

本文通过对航班数据进行分析,帮助客户使用lasso变量筛选、决策树、朴素贝叶斯、QDA、LDA等方法,对航班延误的影响因素进行预测分析。同时,本文还对缺失值进行处理,并使用k折交叉验证对模型进行评估。

数据来源和预处理

本文所使用的数据集为航班数据集。数据集中包括了航班号、起飞时间、到达时间、起飞机场、到达机场、航班延误等信息。

   
data=read.table("12_months_dataFinal.csv")

head(data)

image.png

image.png

image.png

image.png

   
colnames(data)

image.png

在审查数据之后,有几个方面被认为对航班延误有影响。

1.航空公司:航空公司,尾号和航班号。

2.时间:季度、月和日。

3.操作:承运人,尾号和航班号。

4.地理:起源机场和目的地机场。

选择一些变量做个图看一下变化趋势

image.png

image.png

image.png

image.png

image.png

因变量为:ARR_DELAY

分别采用三种方法对空值进行处理

在进行数据分析之前,需要对数据进行预处理。本文采用了如下方法进行数据预处理:

(1)删除法

   
data1=na.omit(data)

image.png

(2)平均值补缺

   
data2[index,i]=mean(na.omit(data[,i]))

image.png

(3)多重补插法进行补缺。

   
completedData <- complete(tempData,1)

方法

本文使用了如下方法对航班延误的影响因素进行预测分析:

  • lasso变量筛选
  • 决策树
  • 朴素贝叶斯
  • QDA
  • LDA
  • k折交叉验证

变量筛选

使用lasso算法进行筛选变量

使用lasso算法进行筛选变量是指在统计学和机器学习中,使用一种叫做Lasso(Least Absolute Shrinkage and Selection Operator)的算法来进行特征选择的过程。Lasso算法通过对数据进行正则化,将某些特征的系数缩小至0,从而实现对特征的筛选和降维。这样可以避免过拟合和提高模型的泛化能力,同时还可以提高模型的解释性和可解释性。Lasso算法在数据挖掘、生物信息学、金融、图像处理等领域都有广泛的应用。

   
xmat <- model.matrix( ARR\_DELAY\~. -DEP\_DELAY- DEP\_DEL15-ARR\_DEL15 , dat

建立lasso模型

   
cv.lasso <- cv.glmn

1111.png

   
coef(cv.lasso

image.png

根据lasso筛选出最优的变量

Lasso(Least Absolute Shrinkage and Selection Operator)是一种用于特征选择和回归分析的统计方法。它可以通过对输入数据进行正则化来减少模型的复杂度,并且可以将一些不重要的特征的权重缩小甚至归零,从而达到特征筛选的目的。

在Lasso中,通过调整正则化参数λ的大小,可以控制模型的复杂度和特征选择的程度。当λ越大时,模型的复杂度越小,特征选择的程度越高。因此,可以通过交叉验证等方法来选择最优的λ值,进而筛选出最优的变量。

简而言之,通过Lasso方法筛选出最优的变量,就是在控制模型复杂度的前提下,选出对目标变量影响最大的特征,从而提高模型的预测能力。

   
variables<-row\.names(c)\[inds]

image.png

筛选变量

   
data2=data2[,c(variables[-1],"ARR_DELAY")]

使用决策树填充缺失值

使用决策树填充缺失值是指在数据集中存在缺失值的情况下,使用决策树模型来预测缺失值并进行填充。具体地,可以将数据集中的所有特征和标签都作为输入,将含有缺失值的样本作为测试数据,利用已有的数据来训练决策树模型,然后使用训练好的模型来预测缺失值并进行填充。这种方法可以利用数据集中已有的信息来预测缺失值,从而提高数据的完整性和可用性。

   
m <- rpart(ARR_DELAY~  QUARTER+MONTH+DAY_OF_MONTH+DAY_OF_WEEK+UNIQUE_CA

image.png

查看重要变量

   
m$variable.importance

image.png

预测缺失值

   
predict(m, data[notna

image.png

朴素贝叶斯

朴素贝叶斯是一种基于贝叶斯定理的分类算法。它假设所有特征之间相互独立,即朴素贝叶斯算法中的“朴素”指的是这种独立性假设。该算法通过计算每个类别的先验概率和每个特征在每个类别中的条件概率来预测新数据的分类。朴素贝叶斯算法在文本分类、垃圾邮件过滤、情感分析等领域得到了广泛应用。

   
mod1<-naiveBayes ( class~  ARR_DELAY_GROUP+DEP_DELAY_NEW+DEP_DELAY_GROU

混淆矩阵

混淆矩阵是用于评估分类模型性能的一种方法。它是一个二维矩阵,其中行表示真实类别,列表示预测类别。矩阵中的每个元素表示属于真实类别的样本被预测为属于预测类别的数量。混淆矩阵可以用于计算准确率、召回率、F1分数等指标,以评估分类模型的性能。

   
table(data2[1:50000,"class"], fit)

image.png

   
plot( performance( prediction(as.numeric(fit), as.numeric(data2[1:50000,

image.png

   
s"] )), "auc" )@y.values[[1]]

image.png

测试数据

   
fit <-predict(mod1,datates )
plot( performance( prediction(as.numeric(fit), as.numeric(datatest[1:90,

image.png

k折交叉验证

k折交叉验证是一种常用的模型评估方法。它将数据集分成k个等份,然后每次将其中一个子集作为验证集,剩下的k-1个子集作为训练集,进行k次模型训练和验证。最终将k次验证的结果取平均值作为模型的性能指标。这种方法可以有效地利用数据集,减小因为数据集不同而导致的模型性能差异,并且可以避免过拟合。

   
performance( prediction(as.numeric(fit), as.numeric(datatest[1:90,"clas

k=10  
for(kk in 1:k){  
  index=sample(1:dim(data2)[1],floor(dim(data2)[1]*(1/k)),replace=F)#se

image.png

QDA

QDA是一种分类算法,全称为Quadratic Discriminant Analysis,即二次判别分析。它是一种基于贝叶斯定理的分类方法,适用于分类问题中的多个类别和多个特征。QDA假设每个类别的特征分布都是高斯分布,并且每个类别的协方差矩阵不同,因此可以通过计算每个类别的概率来进行分类。与线性判别分析(LDA)相比,QDA可以更好地处理非线性的分类问题,但是由于需要估计每个类别的协方差矩阵,当特征维度很高时,计算复杂度会很高。

   
z <- qda(data2[,c(selection2

image.png

   
##ROC  
  
plot( performance( prediction(as.numeric(fit), as.n

image.png

   
performance( prediction(as.numeric(fit),  as.numeric(data2[ ,"class"]

image.png

k折交叉验证

   
## 1  th accuracy of qda is  0.8807619  
## 2  th accuracy of qda is  0.8872381  
## 3  th accuracy of qda is  0.8798095  
## 4  th accuracy of qda is  0.8899048  
## 5  th accuracy of qda is  0.888  
## 6  th accuracy of qda is  0.8822857  
## 7  th accuracy of qda is  0.8746667  
## 8  th accuracy of qda is  0.8912381  
## 9  th accuracy of qda is  0.8857143  
## 10  th accuracy of qda is  0.8965714

precisek/k#caculate precision

## [1] 0.885619

LDA分类线性判别分析

线性判别分析是一种很重要的分类算法,同时也是一种降维方法(这个我还没想懂)。和PCA一样,LDA也是通过投影的方式达到去除数据之间冗余的一种算法。

   
z <- lda(class ~ ., data2

image.png

ROC

ROC代表接收者操作特征曲线(Receiver Operating Characteristic Curve),是一种用于评估分类模型性能的方法。ROC曲线是一条以假阳性率(False Positive Rate)为横坐标,真阳性率(True Positive Rate)为纵坐标的曲线。ROC曲线越靠近左上角,说明模型的性能越好。ROC曲线下方的面积被称为AUC(Area Under the Curve),AUC越大,模型的性能越好。

image.png

   
performance( prediction(as.numeric(fit), as.numeric(data2[ ,"class"])),

image.png

k折交叉验证

   
## 1  th accuracy of lda is  0.831619  
## 2  th accuracy of lda is  0.8251429  
## 3  th accuracy of lda is  0.8213333  
## 4  th accuracy of lda is  0.8219048  
## 5  th accuracy of lda is  0.8209524  
## 6  th accuracy of lda is  0.8184762  
## 7  th accuracy of lda is  0.8226667  
## 8  th accuracy of lda is  0.8171429  
## 9  th accuracy of lda is  0.816381  
## 10  th accuracy of lda is  0.8251429

precisek/k#caculate precision

## [1] 0.8220762

决策树

决策树是一种基于树形结构的分类和回归算法,它通过对数据集进行分割,逐步生成一棵决策树,每个节点代表一个决策,每个分支代表一个可能的结果,最终叶子节点代表分类或回归的结果。在分类问题中,决策树可以通过一系列的条件判断对数据进行分类;在回归问题中,决策树可以通过对数据进行分割并对每个分割区域内的数据进行平均或加权平均来预测数值型的结果。决策树具有易于理解、易于实现、可解释性强等优点,但也容易出现过拟合等问题。

   
z <- rpart(class ~ ., data2[,c(selection2,"class")]  )

image.png

   
plot( performance( prediction(as.num

image.png

   
## 1  th accuracy of lda is  1  
## 2  th accuracy of lda is  1  
## 3  th accuracy of lda is  1  
## 4  th accuracy of lda is  1  
## 5  th accuracy of lda is  1  
## 6  th accuracy of lda is  1  
## 7  th accuracy of lda is  1  
## 8  th accuracy of lda is  1  
## 9  th accuracy of lda is  1  
## 10  th accuracy of lda is  1

precisek/k#caculate precision

## [1] 1

QQ截图20220925234816.png

最受欢迎的见解

1.PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素贝叶斯模型和KMEANS聚类用户画像

2.R语言基于树的方法:决策树,随机森林

3.python中使用scikit-learn和pandas决策树

4.机器学习:在SAS中运行随机森林数据分析报告

5.R语言用随机森林和文本挖掘提高航空公司客户满意度

6.机器学习助推快时尚精准销售时间序列

7.用机器学习识别不断变化的股市状况——隐马尔可夫模型的应用

8.python机器学习:推荐系统实现(以矩阵分解来协同过滤)

9.python中用pytorch机器学习分类预测银行客户流失

标签:LDA,QDA,##,模型,lda,决策树,th,accuracy,lasso
From: https://www.cnblogs.com/tecdat/p/17982571

相关文章

  • cas3.5配置LDAP域控
    一、安装cas3.5点击下载CAS3.5.2:CAS解压缩下载的cas-server-3.5.2-release.zip,在%CAS%\modules文件夹中找到cas-server-webapp-3.5.2.war将其重命名为cas.war将cas.war拷贝到%TOMCAT_HOME%\webapps文件夹下,启动Tomcat,就会看到Tomcat自动将cas.war解压到cas文件夹中......
  • R语言软件对房屋价格预测:回归、LASSO、决策树、随机森林、GBM、神经网络和SVM可视化
    全文链接:https://tecdat.cn/?p=34827原文出处:拓端数据部落公众号在房地产市场中,准确地预测房屋价格是至关重要的。过去几十年来,随着数据科学和机器学习的快速发展,各种预测模型被广泛应用于房屋价格预测中。而R语言作为一种强大的数据分析和统计建模工具,被越来越多的研究者和从业......
  • Zabbix 6.2.3配置LDAP
    一、管理------认证-------LDAP设置 二、添加LDAP服务器 三、输入zabbix的那个密码,点击测试没问题后,保存 四、启用LADP验证 五、认证,选择默认验证方式为是LDAP,再点击更新, 六、添加用户,密码可以不用输入,但是帐号和AD域保持一标 ......
  • [转]JAVA使用LocalDate获取当前日期所在季度的开始日期和结束日期
    原文地址:JAVA使用LocalDate获取当前日期所在季度的开始日期和结束日期-yvioo-博客园需要使用jdk1.8及以上  /***获取当前日期所在季度的开始日期和结束日期*季度一年四季,第一季度:1月-3月,第二季度:4月-6月,第三季度:7月-9月,第四季度:10月-12月......
  • zabbix对接LDAP配置。
    1、搜索属性就是LDAP上面的uid。2、配置到这你以为这就完了?退出了你就登录不了进去。不过没事修改数据库:usezabbix;selectauthentication_typefromconfig;1-LDAP0-系统updateconfigsetauthentication_type=0;修改完成,用之前的账号登陆。(1)接下来建议先创建一个组(2)添......
  • 【Amadeus原创】cas3.5配置LDAP域控
    一、安装cas3.5点击下载CAS3.5.2:CAS解压缩下载的cas-server-3.5.2-release.zip,在%CAS%\modules文件夹中找到cas-server-webapp-3.5.2.war将其重命名为cas.war将cas.war拷贝到%TOMCAT_HOME%\webapps文件夹下,启动Tomcat,就会看到Tomcat自动将cas.war解压到ca......
  • 机器学习-无监督机器学习-LDA线性判别分析-25
    目录1.LinearDiscriminantAnalysis线性判别分析1.LinearDiscriminantAnalysis线性判别分析经常被用于分类问题的降维技术,相比于PCA,LDA可以作为一种有监督的降维算法,降维的时候用到了y的真实值,有监督的降维。在PCA中,算法没有考虑数据的标签(类别),只是把原数据映射到一些方......
  • 【scikit-learn基础】--『监督学习』之 LASSO回归
    LASSO(LeastAbsoluteShrinkageandSelectionOperator)回归模型一般都是用英文缩写表示,硬要翻译的话,可翻译为最小绝对收缩和选择算子。它是一种线性回归模型的扩展,其主要目标是解决高维数据中的特征选择和正则化问题。1.概述在LASSO中,通过使用L1正则化项,它能够在回归系数中......
  • LocalDateTime、LocalDate、Date、String相互转化
    为什么日期有Date了,还在JDK8中推出了LocalDateTime、LocalDate呢?非线程安全的方法Date类的大部分方法都不是线程安全的,比如setYear()、setMonth()、setDate()、setHours()、setMinutes()、setSeconds()等方法。这些方法都可以修改Date对象的内部状态。如果多个线程同时访问和......
  • C++ Qt开发:QSqlDatabase数据库组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QSqlDatabase数据库模块的常用方法及灵活运用。QtSQL模块是Qt框架的一部分,它提供了一组类和函数......