基于XGBoost的中文垃圾分类系统实战(TF-IDF + XGBoost)

基于 XGBoost 的中文垃圾分类系统实战

垃圾分类已经成为城市管理和环保的重要课题。本项目通过 XGBoost + TF-IDF 实现了中文垃圾名称的自动分类,支持"可回收垃圾、干垃圾、湿垃圾、有害垃圾"四类预测,并附带完整训练与预测代码。


一、项目介绍

本项目主要流程包括:

  1. 数据预处理 :读取垃圾名称数据,并使用 jieba 分词。
  2. 特征工程 :采用字符级 TF-IDF 提取文本特征。
  3. 模型训练 :使用 XGBoost 进行多分类训练。
  4. 模型保存与加载 :训练后的模型与向量化器通过 joblib 保存,方便后续预测。
  5. 预测接口:封装成 Python 类,输入垃圾名称即可预测类别。

二、代码解析

1. 数据预处理与分词

python 复制代码
import jieba

def load_and_cut(data):
    data['garbage_name'] = data['garbage_name'].astype(str)
    # 中文分词
    data['text_cut'] = data['garbage_name'].apply(lambda x: " ".join(jieba.lcut(x)))
    return data

这里我们使用 jieba.lcut 对中文垃圾名称进行分词处理,为后续特征工程做准备。


2. 特征工程(TF-IDF)

python 复制代码
from sklearn.feature_extraction.text import TfidfVectorizer
import joblib

def feature_engineering(data):
    vectorizer = TfidfVectorizer(
        analyzer='char', 
        ngram_range=(1, 3), 
        max_features=10000, 
        min_df=2,
        norm='l2',
        sublinear_tf=True
    )
    x = vectorizer.fit_transform(data['garbage_name'])
    y = data["type"] - 1  # 标签从 0 开始
    joblib.dump(vectorizer, '../model/tfidf_vectorizer.pkl')
    return x, y

特点:

  • 使用字符级 n-gram 覆盖更多语义信息
  • sublinear_tf=True 对高频词进行对数缩放
  • 保存向量化器,便于部署和预测

3. XGBoost 模型训练

python 复制代码
from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, accuracy_score

def model_train(x, y):
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=23, stratify=y)
    estimator = XGBClassifier(
        n_estimators=150, max_depth=6, learning_rate=0.2,
        subsample=1.0, colsample_bytree=0.8
    )
    estimator.fit(x_train, y_train)
    y_pred = estimator.predict(x_test)
    print('模型准确率:', accuracy_score(y_test, y_pred))
    print('分类报告:\n', classification_report(y_test, y_pred))
    joblib.dump(estimator, '../model/gc_model_v1.pkl')

使用 train_test_split 分层采样,保证每类样本比例一致。

XGBoost 参数为之前 RandomizedSearchCV 调优后的最优参数。


4. 封装预测类

python 复制代码
import os
import joblib
import logging

class GarbageClassifier:
    LABEL_MAP = {0: "可回收垃圾", 1: "干垃圾", 2: "湿垃圾", 3: "有害垃圾"}

    def __init__(self, model_dir='../model'):
        self.vectorizer = None
        self.model = None
        self._load_model(model_dir)

    def _load_model(self, model_dir):
        base_dir = os.path.dirname(os.path.abspath(__file__))
        vec_path = os.path.join(base_dir, model_dir, 'tfidf_vectorizer.pkl')
        model_path = os.path.join(base_dir, model_dir, 'gc_model_v1.pkl')
        self.vectorizer = joblib.load(vec_path)
        self.model = joblib.load(model_path)

    def predict(self, text: str) -> dict:
        text_features = self.vectorizer.transform([text])
        label_id = int(self.model.predict(text_features)[0])
        return {"text": text, "label_id": label_id, "label_name": self.LABEL_MAP.get(label_id, "未知分类")}

特点:

  • 模型和向量化器只加载一次
  • 可多次调用 predict,性能极快
  • 输出包含类别 ID 和名称,方便前端显示

5. 测试预测

python 复制代码
if __name__ == "__main__":
    classifier = GarbageClassifier()
    test_items = ["瓶子", "猫砂", "苹果皮", "电池"]
    for item in test_items:
        result = classifier.predict(item)
        print(f"[{result['text']}] 属于: {result['label_name']} (ID: {result['label_id']})")

输出示例:

复制代码
[瓶子] 属于: 可回收垃圾 (ID: 0)
[猫砂] 属于: 干垃圾 (ID: 1)
[苹果皮] 属于: 湿垃圾 (ID: 2)
[电池] 属于: 有害垃圾 (ID: 3)

三、运行说明

  1. 克隆项目:
bash 复制代码
git clone https://github.com/MTQ851/garbage-classification-xgboost.git
cd garbage-classification-xgboost
  1. 安装依赖:
bash 复制代码
pip install pandas scikit-learn xgboost jieba joblib
  1. 数据准备:

    将垃圾分类数据放入 ../data/garbage_sorting.csv,并确保包含 garbage_nametype 列。

  2. 训练模型:

bash 复制代码
python train_model.py
  1. 预测测试:
bash 复制代码
python predict.py

四、项目亮点

  • 中文文本分词 + 字符级 TF-IDF 特征工程
  • XGBoost 多分类训练,准确率高
  • 模型封装成类,部署方便
  • 支持批量预测,响应快速

五、源码地址

项目地址:https://github.com/MTQ851/garbage-classification-xgboost.git

如果你喜欢这个案例,记得 Star ⭐ 并分享给更多小伙伴!


相关推荐
Elastic 中国社区官方博客5 小时前
使用 Discord 和 Elastic Agent Builder A2A 构建游戏社区支持机器人
人工智能·elasticsearch·游戏·搜索引擎·ai·机器人·全文检索
2501_933329555 小时前
企业级AI舆情中台架构实践:Infoseek系统如何实现亿级数据实时监测与智能处置?
人工智能·架构
阿杰学AI5 小时前
AI核心知识70——大语言模型之Context Engineering(简洁且通俗易懂版)
人工智能·ai·语言模型·自然语言处理·aigc·数据处理·上下文工程
赛博鲁迅6 小时前
物理AI元年:AI走出屏幕进入现实,88API为机器人装上“最强大脑“
人工智能·机器人
管牛牛6 小时前
图像的卷积操作
人工智能·深度学习·计算机视觉
云卓SKYDROID6 小时前
无人机航线辅助模块技术解析
人工智能·无人机·高科技·云卓科技
琅琊榜首20207 小时前
AI生成脑洞付费短篇小说:从灵感触发到内容落地
大数据·人工智能
imbackneverdie7 小时前
近年来,我一直在用的科研工具
人工智能·自然语言处理·aigc·论文·ai写作·学术·ai工具
roman_日积跬步-终至千里7 小时前
【计算机视觉-作业1】从图像到向量:kNN数据预处理完整流程
人工智能·计算机视觉