【数据分析实战】—预测宠物收养状况数据分析

文章目录

  • 数据集
    • 数据集描述
    • 特征
    • 用途
    • 注意
  • 宠物收养预测
    • 环境准备
    • 探索数据帧
    • 数据预处理
    • 机器学习
      • 数据预处理:
      • 模型培训和评估:
      • 合奏学习:
  • 添加底部名片获取数据集吧!

在这里插入图片描述

数据集

数据集描述

宠物收养数据集提供了对各种因素的全面调查,这些因素可能会影响宠物从收容所被收养的可能性。该数据集包括可供收养的宠物的详细信息,涵盖了各种特征和属性。

特征

  • PetID:每个宠物的唯一标识符。
  • PetType:宠物的类型(例如,狗、猫、鸟、兔子)。
  • Breed:宠物的特定品种。
  • AgeMonths:宠物的年龄(以月为单位)。
  • Color:宠物的颜色。
  • Size:宠物的尺寸类别(小、中、大)。
  • WeightKg:宠物的重量,单位为公斤。
  • Vaccinated:宠物的疫苗接种状态(0-未接种,1-已接种)。
  • HealthCondition:宠物的健康状况(0-健康,1-医疗状况)。
  • TimeInShelterDays:宠物在庇护所的持续时间(天)。
  • AdoptionFee:宠物的收养费(美元)。
  • PreviousOwner:宠物是否有以前的主人(0-否,1-是)。
  • AdoptionLikelihood:宠物被收养的可能性(0-不太可能,1-可能)。

用途

该数据集非常适合有兴趣了解和预测宠物收养趋势的数据科学家和分析师。它可以用于:

  • 预测建模,以确定收养宠物的可能性。
  • 分析各种因素对采用率的影响。
  • 制定提高收容所收养率的战略。

注意

该数据集旨在支持专注于提高宠物收养率和确保更多宠物找到他们永远的家的研究和举措。

宠物收养预测

环境准备

本 Python3 环境安装了许多有用的分析库,它是由kaggle/python Docker镜像定义的:https://github.com/kaggle/docker-python。例如,以下是要加载的几个有用的包

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)

输入数据文件在只读“…/Input/”目录中可用,例如,运行此操作(通过单击run或按Shift+Enter)将列出输入目录下的所有文件

import os
for dirname, _, filenames in os.walk('/kaggle/input'):for filename in filenames:print(os.path.join(dirname, filename))

导入数据集 df = pd.read_csv('/kaggle/input/predict-pet-adoption-status-dataset/pet_adoption_data.csv')

探索数据帧

输入df.head(),输出

在这里插入图片描述
输入

def get_df_info(df):print("\n\033[1mShape of DataFrame:\033[0m ", df.shape)print("\n\033[1mColumns in DataFrame:\033[0m ", df.columns.to_list())print("\n\033[1mData types of columns:\033[0m\n", df.dtypes)print("\n\033[1mInformation about DataFrame:\033[0m")df.info()print("\n\033[1mNumber of unique values in each column:\033[0m")for col in df.columns:print(f"\033[1m{col}\033[0m: {df[col].nunique()}")print("\n\033[1mNumber of null values in each column:\033[0m\n", df.isnull().sum())print("\n\033[1mNumber of duplicate rows:\033[0m ", df.duplicated().sum())print("\n\033[1mDescriptive statistics of DataFrame:\033[0m\n", df.describe().transpose())# Call the function
get_df_info(df)

输出如图所示

在这里插入图片描述

数据预处理

1、 删除‘PetID’列

df = df.drop('PetID', axis = 1)

2、将数据帧划分为特征(X)和目标(y)

X = df.drop('AdoptionLikelihood', axis=1)
y = df['AdoptionLikelihood']

3、处理X中的范畴变量

X = pd.get_dummies(X)

机器学习

输入

from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
from sklearn.preprocessing import StandardScaler, LabelEncoder
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier, ExtraTreesClassifier, AdaBoostClassifier, GradientBoostingClassifier
from xgboost import XGBClassifier
from sklearn.svm import SVC
from lightgbm import LGBMClassifier
from catboost import CatBoostClassifier
from sklearn.multiclass import OneVsRestClassifier
from sklearn.metrics import f1_score
from imblearn.over_sampling import SMOTE
from sklearn.ensemble import VotingClassifier, StackingClassifier

函数apply_models以特征(X)和目标标签(y)为输入,并执行以下任务:

数据预处理:

  • 将数据拆分为训练集和测试集。
  • 检查类不平衡,并在需要时应用SMOTE(过采样)。
  • 使用StandardScaler缩放要素。

模型培训和评估:

  • 定义一组机器学习分类模型。
  • 根据训练数据训练每个模型。
  • 使用准确性和F1分数对测试数据上的每个模型进行评估。
  • 打印每个模型的详细报告(准确性、混淆矩阵、分类报告)。

合奏学习:

  • 根据F1成绩确定表现最好的三款车型。
  • 使用前3个模型创建两个集成模型(投票分类器和堆叠分类器)。
  • 使用准确性、混淆矩阵和分类报告对测试数据上的集成模型进行评估。
  • 总之,该功能旨在探索各种分类模型,确定性能最好的分类模型,并通过集成学习技术潜在地提高性能。

输入

def apply_models(X, y):# Split the data into training and test setsX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# Check for class imbalanceclass_counts = np.bincount(y_train)if len(class_counts) > 2 or np.min(class_counts) / np.max(class_counts) < 0.1:print("Class imbalance detected. Applying SMOTE...")# Apply SMOTE (class imbalance)smote = SMOTE(random_state=42)X_train, y_train = smote.fit_resample(X_train, y_train)# Initialize the StandardScalerscaler = StandardScaler()# Fit the scaler on the training data and transform both training and test dataX_train = scaler.fit_transform(X_train)X_test = scaler.transform(X_test)# Define the modelsmodels = {'LogisticRegression': LogisticRegression(),'SVC': SVC(),'DecisionTree': DecisionTreeClassifier(),'RandomForest': RandomForestClassifier(),'ExtraTrees': ExtraTreesClassifier(),'AdaBoost': AdaBoostClassifier(),'GradientBoost': GradientBoostingClassifier(),'XGBoost': XGBClassifier(use_label_encoder=False, eval_metric='logloss'),'LightGBM': LGBMClassifier(),'CatBoost': CatBoostClassifier(verbose=0)}# Initialize a dictionary to hold the performance of each modelmodel_performance = {}# Apply each modelfor model_name, model in models.items():print(f"\n\033[1mClassification with {model_name}:\033[0m\n{'-' * 30}")# Fit the model to the training datamodel.fit(X_train, y_train)# Make predictions on the test datay_pred = model.predict(X_test)# Calculate the accuracy and f1 scoreaccuracy = accuracy_score(y_test, y_pred)f1 = f1_score(y_test, y_pred, average='weighted')# Store the performance in the dictionarymodel_performance[model_name] = (accuracy, f1)# Print the accuracy scoreprint("\033[1m**Accuracy**:\033[0m\n", accuracy)# Print the confusion matrixprint("\n\033[1m**Confusion Matrix**:\033[0m\n", confusion_matrix(y_test, y_pred))# Print the classification reportprint("\n\033[1m**Classification Report**:\033[0m\n", classification_report(y_test, y_pred))# Sort the models based on f1 score and pick the top 3top_3_models = sorted(model_performance.items(), key=lambda x: x[1][1], reverse=True)[:3]print("\n\033[1mTop 3 Models based on F1 Score:\033[0m\n", top_3_models)# Extract the model names and classifiers for the top 3 modelstop_3_model_names = [model[0] for model in top_3_models]top_3_classifiers = [models[model_name] for model_name in top_3_model_names]# Create a Voting Classifier with the top 3 modelsprint("\n\033[1mInitializing Voting Classifier with top 3 models...\033[0m\n")voting_clf = VotingClassifier(estimators=list(zip(top_3_model_names, top_3_classifiers)), voting='hard')voting_clf.fit(X_train, y_train)y_pred = voting_clf.predict(X_test)print("\n\033[1m**Voting Classifier Evaluation**:\033[0m\n")print("\033[1m**Accuracy**:\033[0m\n", accuracy_score(y_test, y_pred))print("\n\033[1m**Confusion Matrix**:\033[0m\n", confusion_matrix(y_test, y_pred))print("\n\033[1m**Classification Report**:\033[0m\n", classification_report(y_test, y_pred))# Create a Stacking Classifier with the top 3 modelsprint("\n\033[1mInitializing Stacking Classifier with top 3 models...\033[0m\n")stacking_clf = StackingClassifier(estimators=list(zip(top_3_model_names, top_3_classifiers)))stacking_clf.fit(X_train, y_train)y_pred = stacking_clf.predict(X_test)print("\n\033[1m**Stacking Classifier Evaluation**:\033[0m\n")print("\033[1m**Accuracy**:\033[0m\n", accuracy_score(y_test, y_pred))print("\n\033[1m**Confusion Matrix**:\033[0m\n", confusion_matrix(y_test, y_pred))print("\n\033[1m**Classification Report**:\033[0m\n", classification_report(y_test, y_pred))

在X和y上应用该函数apply_models(X, y)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

添加底部名片获取数据集吧!

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

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

相关文章

【Linux】UNIX体系结构分解——操作系统,内核,shell

1.什么是操作系统&#xff1f; 从严格意义上说&#xff0c;可将操作系统定义为一种软件&#xff0c;它控制计算机硬件资源&#xff0c;提供程序运行环境。我们通常将这种软件称为内核&#xff08;kerel)&#xff0c;因为它相对较小&#xff0c;而且位于环境的核心。 从广义上…

前端开发接单公司做到哪些点,客户才愿意把项目包给你。

作为前端外包接单公司&#xff0c;你知道客户选择和你合作都看中哪些因素吗&#xff1f;单纯是价格吗&#xff1f;未必&#xff0c;本位给大家列举7个要素&#xff0c;并对每个要素做了定位&#xff0c;大家查缺补漏吧。 作为前端外包接单公司&#xff0c;要吸引同行客户将前端…

【初阶数据结构】深入解析栈:探索底层逻辑

&#x1f525;引言 本篇将深入解析栈:探索底层逻辑&#xff0c;理解底层是如何实现并了解该接口实现的优缺点&#xff0c;以便于我们在编写程序灵活地使用该数据结构。 &#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1…

【Altium】打开原理图是空白的解决方法

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 打开画完的原理图&#xff0c;报错提示并且图纸为空白的解决方法 2、 问题场景 收到其他人画好的原理图&#xff0c;打开后提示报错&#xff1a;Load file error:值对于无符号的字节太大或太小。并且原理图显示为空…

java基于ssm+jsp 美食推荐管理系统

1前台首页功能模块 美食推荐管理系统&#xff0c;在系统首页可以查看首页、热门美食、美食教程、美食店铺、美食社区、美食资讯、我的、跳转到后台等内容&#xff0c;如图1所示。 图1前台首页功能界面图 用户注册&#xff0c;在注册页面可以填写用户名、密码、姓名、联系电话等…

【shell脚本速成】mysql备份脚本

文章目录 案例需求脚本应用场景&#xff1a;解决问题脚本思路实现代码 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&#xff01;&#x1f60a; &#x1f338;愿您在此停留的每一刻…

【计算机体系结构】

第一章 计算机体系结构的基本概念 知识点 1.冯诺依曼描述的计算机的四个部分 2.指令驱动 3.存储程序计算机在体系结构上的主要特点 4.计算机体系结构的三个方面 5.计算机组成 6.计算机系统的多层次结构 7.翻译和解释 8.一种指令集结构可以有多种组成&#xff0c;同样一种组成可…

【八股系列】shouldComponentUpdate是为了解决什么问题?(React)

&#x1f389; 博客主页&#xff1a;【剑九 六千里-CSDN博客】 &#x1f3a8; 上一篇文章&#xff1a;【说一下mobx和redux有什么区别&#xff1f;(React)】 &#x1f3a0; 系列专栏&#xff1a;【面试题-八股系列】 &#x1f496; 感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章…

Spire.PDF for .NET【文档操作】演示:设置 PDF 文档的 XMP 元数据

XMP 是一种文件标签技术&#xff0c;可让您在内容创建过程中将元数据嵌入文件本身。借助支持 XMP 的应用程序&#xff0c;您的工作组可以以团队以及软件应用程序、硬件设备甚至文件格式易于理解的格式捕获有关项目的有意义的信息&#xff08;例如标题和说明、可搜索的关键字以及…

PSL400PC10P80、PSL410PC10P100、PSL420PC10P60比例换向阀放大器

PSL100PC10P60、PSL110PC10P80、PSL120PC10P100、PSL200PC10P80、PSL210PC10P60、PSL220PC10P100、PSL400PC10P80、PSL410PC10P100、PSL420PC10P60、PSL500PC10P100、PSL510PC10P80、PSL520PC10P100、PSL600PC10P60、PSL610PC10P100、PSL620PC10P60、PSL700PC10P80、PSL710PC10…

vue2和vue3分别如何全局引入并使用js

如下js&#xff1a;util/tool.js var tool {nullKeyValueConvertLine(data){if(data && data.length > 0){data.map((item,index)>{for(var key in item){if(!item[key]&&item[key]!0){item[key] -}}})}}, } export default tool 在vue2项目中全局引…

Android使用DevRing框架搭建数据库实体类以及使用

一、引用DevRing依赖 //导入DevRing依赖implementation com.ljy.ring:devring:1.1.8创建数据库表的依赖implementation org.greenrobot:greendao:3.2.2 // add libraryimplementation org.greenrobot:greendao-generator:3.0.0 二、修改工程目录下的.idea->gradle.xml文件&…

算法与数据结构面试宝典——回溯算法详解(C#,C++)

文章目录 1. 回溯算法的定义及应用场景2. 回溯算法的基本思想3. 递推关系式与回溯算法的建立4. 状态转移方法5. 边界条件与结束条件6. 算法的具体实现过程7. 回溯算法在C#&#xff0c;C中的实际应用案例C#示例C示例 8. 总结回溯算法的主要特点与应用价值 回溯算法是一种通过尝试…

C++:STL容器-map

C:STL容器-map 1. map构造和赋值2. map大小和交换3. map插入和删除4. map查找和统计5. map容器排序 map中所有元素都是pair&#xff08;对组&#xff09; pair中第一个元素为key&#xff08;键&#xff09;&#xff0c;起到索引作用&#xff0c;第二个元素为value&#xff08;实…

移远通信SC200L(展锐SL8541E)Linux系统修改分区大小

一、确定大小 由于默认的根文件分区大小仅500M&#xff0c;/lib目录移植个app都放不进去&#xff0c;这谁受得了&#xff1f; userdata分区却有6G&#xff0c;匀一点。 在 prebuilts/pac-binary/sl8541e/ 下有分区信息表 sl8541e-emmc-marlin2.xml&#xff1a; 找到system项&a…

通过言语和非言语检索线索描绘睡眠中的记忆再激活茗创科技茗创科技

摘要 睡眠通过重新激活新形成的记忆痕迹来巩固记忆。研究睡眠中记忆再激活的一种方法是让睡眠中的大脑再次暴露于听觉检索线索(定向记忆再激活范式)。然而&#xff0c;记忆线索的声学特性在多大程度上影响定向记忆再激活的有效性&#xff0c;目前还没有得到充分探索。本研究通…

华为仓颉语言:编程语言的新篇章

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

多物理场仿真对新能源汽车用电机优化分析 衡祖仿真

1、问题所在 为了改善空气质量&#xff0c;减少环境污染&#xff0c;减少对石油的依赖&#xff0c;降低能源安全风险&#xff0c;国家大力倡导发展新能源汽车&#xff0c;大量新能源车企应运而生&#xff0c;竞争日趋激烈。使用经济效率较高的电机对于增强企业市场竞争力非常重…

【火猫体育】欧洲杯:苏格兰VS匈牙利焦点大战

北京时间6月24日&#xff0c;欧洲杯A组苏格兰VS匈牙利的焦点大战将正式打响。这场比赛对于苏格兰队来说不容有失&#xff0c;因为球队必须战胜对手才能有希望从小组赛出线&#xff0c;晋级本届欧洲杯16强。苏格兰在欧洲杯首战&#xff0c;就被东道主德国队上了一课。德国队在比…

适用于 Android 的 几种短信恢复应用程序

Android 设备上的短信丢失可能由于多种原因而丢失&#xff0c;例如意外删除、恢复出厂设置、系统崩溃或病毒攻击。是否有应用程序可以恢复 Android 上已删除的短信&#xff1f;幸运的是&#xff0c;有几款短信恢复应用程序可以扫描您的 Android 手机并从内存或 SIM 卡中检索已删…