机器学习项目-基于随机森林的航空公司用户满意度分析

news2024/11/16 15:32:31

摘要

​ 航空旅行是人们出行的常用方式之一,乘客对于航空公司的服务质量有着较高的要求。满意度是衡量服务质量的重要指标,因此预测航空公司乘客的满意度对于提高服务质量具有重要意义。

​ 近年来,机器学习在预测领域得到了广泛应用。机器学习模型具有自动学习能力,可以从数据中自动提取特征并进行预测,因此在预测航空公司乘客满意度方面具有较高的潜力。

​ 本研究旨在通过使用机器学习模型来预测航空公司乘客的满意度。我们使用了 Kaggle 公开数据集,并对数据进行了缺失值补齐和特征放缩处理。在此基础上,我们使用了逻辑回归分类、支持向量机和随机森林分类器进行建模并调参。最后,我们对不同模型的性能进行了对比,并得出了有关航空公司乘客满意度的有用信息。

关键词:数据规范化,svm,随机森林,逻辑回归,决策树

数据集介绍

我们使用的数据来自 Kaggle 公开数据集,包含了航空公司乘客的基本信息、机票信息和满意度评分等,该数据中的乘客的部分特征如下:

image-20240623215008253

该数据集中共有约13万条数据,共包含25个变量,我们随机选择其中80%作为训练集,余下20%作为测试集。

导入程序必要的库

pythoinimport pandas as pd
from sklearn import metrics
from sklearn.metrics import hinge_loss
from sklearn import svm
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.tree import DecisionTreeClassifier

读取训练集和测试集

X_train = pd.read_csv('dataset/train.csv')
X_test = pd.read_csv('dataset/test.csv')
X_train, X_test

image-20240623215246628

数据预处理

def Preprocessing(X):

    # 创建 StandardScaler 对象
    scaler = StandardScaler()

    # 3.1 将分类变量(非数值)转换为数值变量
    X['Gender'] = X['Gender'].astype('category')
    X['Gender'] = X['Gender'].astype('category').cat.codes    # male:1  female:0

    X['Customer Type'] = X['Customer Type'].astype('category')
    X['Customer Type'] = X['Customer Type'].astype('category').cat.codes    # disloyal Customer:1  Loyal Customer:0

    X['Type of Travel'] = X['Type of Travel'].astype('category')
    X['Type of Travel'] = X['Type of Travel'].astype('category').cat.codes    # Personal Travel:1  Business travel:0

    X['Class'] = X['Class'].astype('category')
    X['Class'] = X['Class'].astype('category').cat.codes    # Eco Plus:2  Business:1  Eco:0

    X['satisfaction'] = X['satisfaction'].astype('category')
    X['satisfaction'] = X['satisfaction'].astype('category').cat.codes    # satisfied:1  neutral or dissatisfied:0


    # 3.2 标准化
    X_scaled = scaler.fit_transform(X[['Age']])
    X['Age'] = X_scaled

    X_scaled = scaler.fit_transform(X[['Flight Distance']])
    X['Flight Distance'] = X_scaled

    X_scaled = scaler.fit_transform(X[['Departure Delay in Minutes']])
    X['Departure Delay in Minutes'] = X_scaled

    X_scaled = scaler.fit_transform(X[['Arrival Delay in Minutes']])
    X['Arrival Delay in Minutes'] = X_scaled


    X = X.fillna(X.mean())

    # 3.3 划分出训练数据 和 对应的label
    return X.iloc[:,2:-1], X.iloc[:,-1]

测评指标

def evaluate(y_true, y_pred):
    # 计算准确率
    accuracy = metrics.accuracy_score(y_true, y_pred)
    print("Accuracy:", accuracy)
    # 计算精确率
    precision = metrics.precision_score(y_true, y_pred)
    print("Precision:", precision)
    # 计算召回率
    recall = metrics.recall_score(y_true, y_pred)
    print("Recall:", recall)
    # 计算 F1 值
    f1 = metrics.f1_score(y_true, y_pred)
    print("F1 score:", f1)
    # 计算损失值
    loss = hinge_loss(y_true, y_pred)
    print("loss:", loss)
    return accuracy, precision, recall, f1, loss

训练模型

数据处理、得到训练集和测试集

# 5.1数据处理、得到训练集和测试集
X_train, y_train = Preprocessing(X_train)
X_test, y_test = Preprocessing(X_test)

决策树模型

# 6.1 决策树模型
# 6.1.1初始化决策树分类器
clf = DecisionTreeClassifier()
# 6.1.2训练模型
clf.fit(X_train, y_train)
# 6.1.3使用模型进行预测
predictions = clf.predict(X_test)
# 6.1.4测评结果
evaluate(y_test, predictions)

image-20240623215532408

随机森林分类器

# 6.2随机森林分类器
# 6.2.1创建随机森林分类器
clf = RandomForestClassifier(n_estimators=80, random_state=0)
# 6.2.2训练模型
clf.fit(X_train, y_train)
# 6.2.3预测结果
train_predictions = clf.predict(X_test)
#6.2.4测评模型
evaluate(y_test, train_predictions)

image-20240623215615685

SVM

#6.3SVM 模型
# 6.3.1创建 SVM 模型, 样本均衡化
model = svm.SVC(kernel='linear', C = 1, class_weight='balanced')
# 6.3.2训练模型
model.fit(X_train, y_train)
# 6.3.3预测目标变量
predictions = model.predict(X_test)

image-20240623215705355

https://mbd.pub/o/bread/ZpebmpZu

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1884882.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器人入门路线及参考资料(机器人操作方向)

机器人(操作方向)入门路线及参考资料 前言1 数理基础和编程2 机器人学理论3 计算机视觉4 机器人实操5 专攻方向总结Reference: 前言 随着机器人和具身智能时代的到来,机器人越来越受到大家的重视,本文就介绍了机器人(…

基于公有云部署wordpress

云平台选择 腾讯云 阿里云 华为云 项目部署 一、架构讲解 1.1、定义与组成 LNMP是Linux、Nginx、MySQL(或MariaDB)和PHP(或Perl、Python)的首字母缩写,代表在Linux系统下使用Nginx作为Web服务器,MySQL作为…

vue3 elementplus Springboot 商品系统,商城类后台管理案例源码

系统演示 项目获取地址 Springboot vue3 elementplus 商品管理系统 商城后台管理系统案例源码 附带系统演示,环境搭建教程,开发工具 技术栈:SpringBoot Vue3 ElementPlus MybatisPlus 开发工具:idea 后端构建工具:Maven 前端构建工具:vite 运行环境:Windows …

Linux基础IO操作详解

C文件IO相关接口 fopen函数 pathname: 要打开的文件名字符串mode: 访问文件的模式 模式描述含义“r”读文件不存在失败返回null“r”读写文件不存在打开失败返回null,文件存在则从头开始覆盖现有的数据(不会清空数据)“w”写文件不存在创建…

[leetcode]文件组合

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<vector<int>> fileCombination(int target) {vector<vector<int>> vec;vector<int> res;int sum 0, limit (target - 1) / 2; // (target - 1) / 2 等效于 target /…

[机器学习]-4 Transformer介绍和ChatGPT本质

Transformer Transformer是由Vaswani等人在2017年提出的一种深度学习模型架构&#xff0c;最初用于自然语言处理&#xff08;NLP&#xff09;任务&#xff0c;特别是机器翻译。Transformer通过自注意机制和完全基于注意力的架构&#xff0c;核心思想是通过注意力来捕捉输入序列…

RuoYi-Vue项目后端增加自己的模块,要注意的点,只看我这一片就够了。

若依版本&#xff1a; RuoYi-Vue: &#x1f389; 基于SpringBoot&#xff0c;Spring Security&#xff0c;JWT&#xff0c;Vue & Element 的前后端分离权限管理系统&#xff0c;同时提供了 Vue3 的版本 背景&#xff1a; 后端想自己增加一个模块&#xff0c;但是包路径…

气膜建筑照明:吊式与落地灯杆的利弊—轻空间

气膜建筑以其独特的设计和高效的功能性&#xff0c;广泛应用于体育场馆、工厂等各类场所。在这些气膜建筑中&#xff0c;照明方式的选择尤为重要。尽管有多种照明方式可供选择&#xff0c;但常用的反射光源形式在气膜建筑中尤为普遍。轻空间将重点介绍两种常用的反射照明方式&a…

内容营销专家刘鑫炜:越是赚不到钱,越要加大推广力度

这两天&#xff0c;一位跟我们有长期合作关系的小微企业主老苏问我。 “现在钱这么不好赚&#xff0c;品牌推广应该怎么做&#xff1f;” 我说&#xff1a;“这是好机会&#xff0c;加大投放力度&#xff01;” 老苏很是不解&#xff0c;这时候不开源节流&#xff0c;还要加…

激光粒度分析仪计量校准规范:确保测量精度的关键

激光粒度分析仪作为现代科研与工业生产中不可或缺的分析工具&#xff0c;广泛应用于陶瓷、土壤、制药、建材、环保等众多领域。 其通过激光散射原理&#xff0c;快速准确地测量颗粒材料的粒度分布&#xff0c;为材料科学研究、产品质量控制及环境保护等提供了强有力的技术支持…

绘唐3一键追爆款文刻创作聚星文社

聚星文社是一个中国的文学社交平台&#xff0c;提供了一个让作家和读者相互交流和分享作品的平台。 在聚星文社&#xff0c;作家可以在平台上发布自己的作品&#xff0c;获得读者的阅读和评论&#xff0c;同时也可以与其他作家进行交流与学习。 点击下载即可 读者可以在平台上…

视频号视频怎么下载保存到手机,视频号视频如何下载到电脑本地

在数字化浪潮的推动下&#xff0c;视频号成为了我们获取信息、分享生活的重要平台。但有时候&#xff0c;我们遇到一些精彩的内容&#xff0c;想要保存下来以便日后观看&#xff0c;却发现视频号并不提供直接的下载功能。下面我就来为大家详细介绍视频号视频下载的方法&#xf…

maven 打包执行配置(对maven引用的包或者丢进去的包都包含在里面)打成jar包

一 、springboot jar包 maven的pom文件 1 在resources下放了一些文件想打进去jar包 2 在lib下放了其他稀奇古怪jar包文件想打进去jar包 编写如下引入jar <build><!-- 打包名称 --><finalName>${project.artifactId}</finalName><resources><…

【C++】C++指针在线程中调用与受保护内存空间读取方法

引言 在C的多线程编程中&#xff0c;正确地管理内存和同步访问是确保程序稳定性和安全性的关键。特别是当涉及到指针在线程中的调用时&#xff0c;对受保护内存空间的访问必须谨慎处理&#xff0c;以防止数据竞争、死锁和内存损坏等问题。本文将详细探讨C指针在线程中调用时如何…

CV每日论文--2024.6.27

1、Text-Animator: Controllable Visual Text Video Generation 中文标题&#xff1a;Text-Animator&#xff1a;可控视觉文本视频生成 简介&#xff1a;视频生成是各行业中具有重要价值但同时也极具挑战性的任务,例如在游戏、电子商务和广告领域。在文本到视频(T2V)生成中,一…

【云原生】服务网格(Istio)如何简化微服务通信

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《未来已来&#xff1a;云原生之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、微服务架构的兴起 2、Istio&#xff1a;服务网格的佼…

【06】SpringBoot与Web开发

1、基于Restful风格的接口 RestController RequestMapping("/demo") public class DemoController {GetMapping("/hello")public String getHello(){return "SpringBoot HelloWorld! 123";}GetMapping("/{id}")public User getUser(P…

linux 控制台非常好用的 PS1 设置

直接上代码 IP$(/sbin/ifconfig eth0 | awk /inet / {print $2}) export PS1"\[\e[35m\]^o^\[\e[0m\]$ \[\e[31m\]\t\[\e[0m\] [\[\e[36m\]\w\[\e[0m\]] \[\e[32m\]\u\[\e[0m\]\[\e[33m\]\[\e[0m\]\[\e[34m\]\h(\[\e[31m\]$IP\[\e[m\])\[\e[0m\]\n\[\e[35m\].O.\[\e[0m\]…

仿美团饿了么程序,外卖人9.0商业版外卖订餐源码(PC+微信)

仿美团饿了么程序,外卖人9.0外卖订餐源码,PC微信WAP短信宝,多城市多色版 非常不错的独立版外卖跑腿网站源码&#xff0c;喜欢的可以下载调试看看吧&#xff01;&#xff01; 仿美团饿了么程序,外卖人9.0外卖订餐源码