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

文章目录

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

在这里插入图片描述

数据集

数据集描述

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

特征

  • 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,一经查实,立即删除!

相关文章

企微私域运营中的四大内容运营模块深度解析

在当前的数字营销时代&#xff0c;企业微信&#xff08;企微&#xff09;私域流量运营已成为企业获取用户、建立品牌、提升转化的重要手段。而在企微私域运营中&#xff0c;内容运营作为核心环节&#xff0c;其重要性不言而喻。本文将详细解析企微私域运营中的四大内容运营模块…

ES6新增语法

1、ECMA Ecma国际&#xff08;Ecma International&#xff09;是一家国际性会员制度的信息和电信标准组织。1994年之前&#xff0c;名为欧洲计算机制造商协会&#xff08;European Computer Manufacturers Association&#xff09; 2、ECMAScript ECMAScript 6&#xff08;简…

【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;在注册页面可以填写用户名、密码、姓名、联系电话等…

局域网内vue2 配置本地IP地址访问项目

在日常开发中同事可能需要访问你的前端项目&#xff0c;可以通过配置实现通过ip访问 一.首先找到config文件夹目录下的 index.js文件 将此处的host的值修改为0.0.0.0(即 host: 0.0.0.0) // Various Dev Server settings//host: localhost //将localhost进行替换成 0.0.0.0hos…

Windows 7提权:技术解析与实战指南

Windows 7提权&#xff1a;技术解析与实战指南 在网络安全领域&#xff0c;提权是指通过某些手段获取系统更高权限的过程。对于渗透测试人员或安全研究人员来说&#xff0c;提权是常见且关键的一步&#xff0c;它允许他们更深入地了解系统的安全状况。本文将详细解析Windows 7…

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

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

【计算机体系结构】

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

高考专业抉择结合兴趣、能力、职业规划,理性看待计算机专业的发展前景。

作为一名即将参加2024年高考的学生&#xff0c;我对此问题深感关注。在过去几年里&#xff0c;计算机科学与技术、人工智能、网络安全、软件工程等专业一直被视为热门专业&#xff0c;吸引了大量学生的青睐。然而&#xff0c;随着市场竞争加剧和市场饱和度提高&#xff0c;这些…

如何加载数据库驱动以及JDBC驱动有哪些类型?

加载数据库驱动是JDBC中非常重要的第一步&#xff0c;因为它使得Java应用程序能够与数据库进行通信。加载数据库驱动通常通过调用Class.forName()方法实现&#xff0c;该方法接受一个字符串参数&#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;例如标题和说明、可搜索的关键字以及…

java解析Excel部分数据小数位过长问题

java解析Excel部分数据小数位过长问题 解释&#xff1a; 在Java中解析Excel文件时&#xff0c;如果遇到数据为小数类型但小数位过长&#xff08;例如显示为1.2345678912345678E10&#xff09;&#xff0c;这通常是因为Excel对于数字单元格有一个默认的显示格式&#xff0c;当…

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. 总结回溯算法的主要特点与应用价值 回溯算法是一种通过尝试…