从XGBoost角度理解为什么要使用机器学习

我们使用Python和经典的鸢尾花(Iris)数据集 ,目标是根据花的长度和宽度数据,预测花的品种。

用"笨办法"处理分类问题,其实就是在没有机器学习算法 的情况下,靠人工规则和统计来做判断。我以鸢尾花分类为例,给你展示几种"笨办法"。

🌸 笨办法:人工肉眼判断(基于规则)

鸢尾花数据集有4个特征,但其实花瓣长度 和花瓣宽度 两个特征就足够区分了。我们可以直接写if-else规则:

复制代码
def predict_by_rules(sepal_len, sepal_wid, petal_len, petal_wid):
    """
    基于人工观察到的规律进行分类
    规则来源:看数据分布图总结出来的
    """
    # 山鸢尾(setosa)最明显:花瓣又短又窄
    if petal_len < 2.5:
        return "山鸢尾 (setosa)"
    
    # 剩下的两种:根据花瓣宽度区分
    if petal_wid < 1.8:
        return "变色鸢尾 (versicolor)"
    else:
        return "维吉尼亚鸢尾 (virginica)"

# 测试几个样本
test_samples = [
    [5.1, 3.5, 1.4, 0.2],  # 明显是山鸢尾
    [6.0, 2.9, 4.5, 1.5],  # 变色鸢尾
    [6.5, 3.0, 5.5, 2.1],  # 维吉尼亚鸢尾
]

for sample in test_samples:
    result = predict_by_rules(*sample)
    print(f"特征: {sample} -> 预测: {result}")

优点 :简单、可解释性强

缺点:规则靠经验,边界模糊时容易出错;如果特征很多(比如100个),规则会复杂到写不出来。

但是,使用机器学习,来解决:

复制代码
import xgboost as xgb
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report

# 加载数据
iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练模型
model = xgb.XGBClassifier(n_estimators=100, max_depth=3, learning_rate=0.1,
                          objective='multi:softmax', num_class=3, random_state=42)
model.fit(X_train, y_train)

# 预测与评估
y_pred = model.predict(X_test)
print(f"准确率: {accuracy_score(y_test, y_pred):.2f}")
print(classification_report(y_test, y_pred, target_names=iris.target_names))

❤:加载100条数据,其中70用来训练,30条用来测试。

无论训练还是测试,都需要:特征+标签。也就是 X和y

训练的数据(X_train,y_train)训练结束之后,再用训练的结果来对测试特征,计算出"预测测试特性",这个"预测测试特性"和测试特征y_test做比较,看最后的预测是否成功率高。如果很高,就可以使用。

模型训练完之后怎么用?

很多人初学机器学习时都会卡在这一步------训练完模型后,不知道怎么在实际中应用。我来给你完整展示从训练到部署使用的全过程。


🎯 核心思路:保存模型 → 加载模型 → 预测新数据

模型训练完成后,不能每次都重新训练(太耗时),而是把训练好的模型保存下来 ,以后直接加载使用。


📦 方法:使用 pickle(Python原生,最常用)

第一步:训练并保存模型

复制代码
import pickle
import xgboost as xgb
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# 1. 训练模型(和之前一样)
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(
    iris.data, iris.target, test_size=0.2, random_state=42
)

model = xgb.XGBClassifier(n_estimators=100, max_depth=3, random_state=42)
model.fit(X_train, y_train)

# 2. 保存模型到文件
with open('iris_model.pkl', 'wb') as f:
    pickle.dump(model, f)

print("模型已保存为 iris_model.pkl")

第二步:在新场景中加载并使用

复制代码
import pickle
import numpy as np

# 1. 加载模型
with open('iris_model.pkl', 'rb') as f:
    loaded_model = pickle.load(f)

# 2. 用模型预测新数据
# 假设这是你新采集的一朵花的数据:[花萼长, 花萼宽, 花瓣长, 花瓣宽]
new_flowers = [
    [5.1, 3.5, 1.4, 0.2],   # 新样本1
    [6.7, 3.1, 4.7, 1.5],   # 新样本2
    [7.2, 3.6, 6.1, 2.5],   # 新样本3
]

# 批量预测
predictions = loaded_model.predict(new_flowers)

# 将数字标签转为品种名称
species = {0: '山鸢尾', 1: '变色鸢尾', 2: '维吉尼亚鸢尾'}
for i, pred in enumerate(predictions):
    print(f"样本{i+1}: {new_flowers[i]} -> 预测品种: {species[pred]}")

# 如果想看预测概率(更丰富的信息)
probabilities = loaded_model.predict_proba(new_flowers)
print("\n预测概率详情:")
for i, prob in enumerate(probabilities):
    print(f"样本{i+1}: 山鸢尾{prob[0]:.2%}, 变色鸢尾{prob[1]:.2%}, 维吉尼亚鸢尾{prob[2]:.2%}")
相关推荐
翊众建站5 小时前
用 JSON-LD 给企业官网做结构化数据:LocalBusiness 与 FAQPage 实践笔记
人工智能·搜索引擎·json
梦想不只是梦与想5 小时前
PyTorch、CPU、GPU、CUDA
人工智能·pytorch·python·深度学习·机器学习·cuda
数字融合5 小时前
透明化视频孪生危化安全管控解决方案
人工智能·python·安全
冬奇Lab5 小时前
一天一个开源项目(第253篇):dsh-superagent —— DeepSeek 开源的“主动式”编程智能体原型,核心原则是少占人的注意力
人工智能·开源·资讯
罗西的思考5 小时前
【轻量化复刻大模型 / KIMI K3】KDA 模块交互式演示
人工智能·算法·机器学习
拓恒技术6 小时前
从“可见光漏检”到“热异常锁定”:无人机河道排污口识别与溯源的技术链路
人工智能·视觉检测·无人机
2601_968900776 小时前
按量计费接口实战:从接入、预算到对账的完整链路
人工智能
七牛云行业应用6 小时前
MIT “权重空间编程”:GPT-6 Astra 修改 0.016% 的 Qwen 权重,MATH-500 从 7.9% 升至 48.1%
人工智能·gpt·ai
故七月6 小时前
AI 答案里的竞品共现:怎么看出赛道格局
大数据·人工智能
正在走向自律7 小时前
【3/5】人工智能训练师 三级/高级工 考证学习方向:从“独立执行”到“设计、归因与全链条负责”
人工智能·学习·人工智能训练师·注方案设计·数据质控负责人·模型评测与调优辅助·ai训练项目交付