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

news2024/11/19 7:23:07

文章目录

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

在这里插入图片描述

数据集

数据集描述

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

特征

  • 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 sets
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    
    # Check for class imbalance
    class_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 StandardScaler
    scaler = StandardScaler()

    # Fit the scaler on the training data and transform both training and test data
    X_train = scaler.fit_transform(X_train)
    X_test = scaler.transform(X_test)

    # Define the models
    models = {
        '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 model
    model_performance = {}

    # Apply each model
    for model_name, model in models.items():
        print(f"\n\033[1mClassification with {model_name}:\033[0m\n{'-' * 30}")
        
        # Fit the model to the training data
        model.fit(X_train, y_train)

        # Make predictions on the test data
        y_pred = model.predict(X_test)

        # Calculate the accuracy and f1 score
        accuracy = accuracy_score(y_test, y_pred)
        f1 = f1_score(y_test, y_pred, average='weighted')

        # Store the performance in the dictionary
        model_performance[model_name] = (accuracy, f1)

        # Print the accuracy score
        print("\033[1m**Accuracy**:\033[0m\n", accuracy)

        # Print the confusion matrix
        print("\n\033[1m**Confusion Matrix**:\033[0m\n", confusion_matrix(y_test, y_pred))

        # Print the classification report
        print("\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 3
    top_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 models
    top_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 models
    print("\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 models
    print("\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.coloradmin.cn/o/1856747.html

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

相关文章

工程文档CAD转换必备!在 Java 中将 DWG 转换为 JPG

Aspose.CAD 是一个独立的类库&#xff0c;以加强Java应用程序处理和渲染CAD图纸&#xff0c;而不需要AutoCAD或任何其他渲染工作流程。该CAD类库允许将DWG, DWT, DWF, DWFX, IFC, PLT, DGN, OBJ, STL, IGES, CFF2文件、布局和图层高质量地转换为PDF和光栅图像格式。 Aspose AP…

众所周知,配置即代码≠基础设置即代码

​前段时间翻到几条留言&#xff0c;问&#xff1a; “配置即代码和基础设施即代码一样吗&#xff1f;” “配置即代码是什么&#xff1f;怎么都是基础设施即代码&#xff1f;” 我们都是知道&#xff0c;DevOp的快速发展&#xff0c;让服务器管理与配置的时间大大减少&#x…

AI入门系列:工具篇之ChatGPT的优秀的国内替代品

文章目录 一&#xff0c;智谱清言(ChatGLM)1&#xff0c;智谱清言简介2&#xff0c;[智谱清言地址&#xff0c;点我开始用吧](https://chatglm.cn/) 二&#xff0c;Kimi智能助手1&#xff0c;Kimi简介2&#xff0c;[Kimi地址&#xff0c;点我开始用吧](https://kimi.moonshot.c…

VPDBVE16E、VPDBVE32A、VPDBVE32B比例控制阀放大器

VPDBPC06A、VPDBPC06B、VPDBPC06C、VPDBPC06D、VPDBPC06E、VPDB08PC06100、VPDB08PC06200、VPDB08PC06315、VPDBVE16A、VPDBVE16B、VPDBVE16C、VPDBVE16D、VPDBVE16E、VPDBVE32A、VPDBVE32B、VPDBVE32C、VPDBVE32D、VPDBVE32E、VPDM2VE16A、VPDM2VE16B、VPDM2VE16C、VPDM2VE16D…

HTTP3(QUIC)详解

文章目录 一、HTTP3简述二、为什么不升级改造TCP而使用UDP&#xff1f;三、QUIC的实现四、HTTP3改进详解1. 快速连接建立(1-RTT初次建立&#xff0c;0-RTT恢复&#xff09;2. 无队头阻塞&#xff08;Head-of-Line Blocking&#xff09;重传机制HTTP/2 中的流HTTP/3 中的流 3. 移…

2024年6月24日v1.0.3优雅草超级站长工具开发进度

https://doc.youyacao.com/9/2151 v1.0.3优雅草超级站长工具开发进度 2024年6月24日v1.0.3优雅草超级站长工具开发进度- 演示地址-可测试 https://test2.youyacao.com 介绍 本产品是一款针对站长使用的工具&#xff0c;针对网站域名的多维信息查询工具&#xff0c;本产品…

【自动控制原理课程设计】

利用频率法设计控制器&#xff0c;对象模型采用二阶传递函数&#xff0c;使得校正后的系统的性能指标满足&#xff1a; 1&#xff09;位置误差系统kp10; 2)相角裕度y45&#xff1b; 3&#xff09;幅值裕度h>10dB&#xff1b; 绘制出校正前后的Bode图&#xff0c;并进行闭环…

特征工程与数据预处理全解析:基础技术和代码示例

在机器学习和数据科学的世界里&#xff0c;数据的质量是建模成功与否的关键所在。这就是特征工程和数据预处理发挥作用的地方。本文总结的这些关键步骤可以显著提高模型的性能&#xff0c;获得更准确的预测&#xff0c;我们将深入研究处理异常值、缺失值、编码、特征缩放和特征…

Springboot拦截器使用及其底层源码剖析

博主最近看了一下公司刚刚开发的微服务&#xff0c;准备入手从基本的过滤器以及拦截器开始剖析&#xff0c;以及在帮同学们分析一下上次的jetty过滤器源码与本次Springboot中tomcat中过滤器的区别。正题开始&#xff0c;拦截器顾名思义是进行拦截请求的一系列操作。先给大家示例…

Java学习 - 网络TCP,UDP协议讲解

TCP协议 TCP协议特点 面向连接 应用程序在使用TCP协议之前&#xff0c;必须先建立TCP连接在数据传输完毕后&#xff0c;必须释放已经建立的TCP连接类似于打电话 点对点通信 TCP协议就像打电话&#xff0c;只能一对一&#xff0c;不能一对多或多对多 可靠传输 TCP协议能够保证…

分布式锁实现方案-基于Redis实现的分布式锁

目录 一、基于Lua看门狗实现 1.1 缓存实体 1.2 延迟队列存储实体 1.3 分布式锁RedisDistributedLockWithDog 1.4 看门狗线程续期 1.5 测试类 1.6 测试结果 1.7 总结 二、RedLock分布式锁 2.1 Redlock分布式锁简介 2.2 RedLock测试例子 2.3 RedLock 加锁核心源码分析…

OpenAI CTO谈GPT-5将达博士生智力水平;斯坦福评估排名前十两款来自中国

&#x1f989; AI新闻 &#x1f680; OpenAI CTO谈GPT-5将达博士生智力水平 摘要&#xff1a;美国达特茅斯工程学院采访了OpenAI首席技术官米拉・穆拉蒂&#xff0c;她表示GPT-4的智力相当于高中生&#xff0c;而GPT-5将在一年半后发布&#xff0c;预计达到博士生水平。穆拉蒂…

【Unity Shader】Alpha Blend(Alpha混合)的概念及其使用示例

在Unity和图形编程中&#xff0c;Alpha Blend&#xff08;也称为Alpha混合&#xff09;是一种用于处理像素透明度的技术。它允许像素与背景像素融合&#xff0c;从而实现透明或半透明的效果。Alpha Blend在渲染具有透明度的物体&#xff08;如窗户、玻璃、水、雾等&#xff09;…

闷热烦躁,精神倦怠?3个食疗方,5款好物,助您清凉度夏~

夏日&#xff0c;阳气旺盛&#xff0c;万物繁荣秀丽&#xff0c;但赤日炎炎似火烧&#xff0c;人们容易闷热、食欲不佳、四肢倦怠、萎靡不振等&#xff0c;再加上蚊虫多&#xff0c;更是让人烦躁不安&#xff01; 5款清凉好物 赶走蚊虫 天气炎热&#xff0c;蚊子、小虫都来了…

webpack【实用教程】

基础配置 配置的拆分和合并 通常 webpack 的配置文件会有3个 webpack.common.js 公共配置&#xff08;会被另外两个配置文件导入并合并&#xff09;webpack.dev.js 开发环境的配置webpack.prod.js 生产环境的配置 开发环境的本地服务 在 webpack.dev.js 中配置 devServer:…

springboot加载bean的方式

在SpringBoot的大环境下&#xff0c;基本上很少使用之前的xml配置Bean&#xff0c;主要是因为这种方式不好维护而且也不够方便。 springboto注入bean主要采用下图几种方式&#xff0c; 1、注解装配Bean 1、使用Component等派生注解 只要在类上加类上加 Component 注解即可,该…

Kotlin 运行代码片段多种方式

目录 场景描述 一、Scratch files and worksheets in the IDE 1、Scratch files(草稿文件) 特点&#xff1a; Scratch files文件创建步骤&#xff1a; 功能解释&#xff1a; Scratch Buffer笔记文件&#xff1a; 2、Worksheets(工单) 1&#xff09;、创建方式不同。 …

基于堆叠长短期记忆网络 Stacked LSTM 预测A股股票价格走势

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域&#xff0c;讨论了各种复杂的深度神经网络思想&#xff0c;如卷积神经网络、循环神经网络、生成对…

思看科技冲刺上市疑云:募资用途遭强烈质疑,IPO前突击分红

近日&#xff0c;思看科技&#xff08;杭州&#xff09;股份有限公司&#xff08;下称“思看科技”&#xff09;已更新提交2023年最新财务资料&#xff0c;重启科创板IPO进程。贝多财经了解到&#xff0c;思看科技的上市申请于2023年6月获上交所受理&#xff0c;目前已进入问询…

简鹿文件批量重命名:一款文件批量改名高手都在用的工具

作为 IT 行业的搬砖民工&#xff0c;互联网的数据量爆炸性增长&#xff0c;文件管理成为了一项日益重要的任务。"简鹿文件批量重命名"应运而生&#xff0c;旨在为用户提供一个高效、灵活的解决方案&#xff0c;以应对繁琐的文件命名、排序、创建及属性修改等挑战。 这…