当前位置: 首页 > news >正文

机器学习的简单应用

什么是机器学习?

定义: ‌机器学习(Machine Learning, ML)‌ 是人工智能(AI)的一个子领域,其核心是 ‌通过算法让计算机从数据中自动学习规律,并基于这些规律对新数据做出预测或决策。与传统编程不同,机器学习不是通过显式规则(如 if-else 语句)解决问题,而是通过数据驱动的方式,让模型从经验中自我优化。

通俗一点:想象你要教一个孩子识别猫和狗时

  1. 传统编程‌:你手动编写规则,比如“有尖耳朵的是猫,有长鼻子的是狗”。但现实中猫狗特征复杂多变(比如折耳猫、短鼻狗),规则很快失效。
  2. 机器学习‌:你给孩子看大量猫狗照片,并告诉他哪些是猫、哪些是狗。孩子通过观察总结出规律(如毛发纹理、眼睛形状),最终即使看到没见过的图片也能正确分类。

机器学习中的角色‌:

  • 数据‌ = 猫狗照片
  • 算法‌ = 孩子的学习方式(比如对比特征、试错)
  • 模型‌ = 孩子脑中形成的识别规则
  • 预测‌ = 孩子对新照片的判断

机器学习的三大范式

好了,了解这么多,那就带你们去看看机器学习的模型是怎么来了

完整流程大纲

  1. 加载数据并探索

  2. 数据预处理(特征编码、标准化)

  3. 划分训练集和测试集

  4. 选择并训练模型

  5. 评估模型性能

  6. 优化模型(可选)

  7. 保存模型并预测新数据

1. 加载数据并探索

import pandas as pd# 加载数据
df = pd.read_csv('水果数据集.csv')# 查看数据前5行
print(df.head())# 统计信息
print(df.describe())# 类别分布
print(df['水果名称'].value_counts())

运行结果

注意:如果没有水果数据集,可以自主生成,用来学习测试,代码如下:

import pandas as pd
import numpy as np# 设定随机种子(保证可重复性)
np.random.seed(42)# 生成50行数据
data = {'大小(cm)': [],'颜色': [],'水果名称': []
}# 定义水果的规则
fruit_rules = {'苹果': {'大小范围': (5, 10), '可能颜色': ['红', '绿', '黄']},'香蕉': {'大小范围': (15, 25), '可能颜色': ['黄']},'葡萄': {'大小范围': (1, 3), '可能颜色': ['紫', '绿']}
}# 随机生成数据
for _ in range(50):# 随机选择一个水果fruit = np.random.choice(['苹果', '香蕉', '葡萄'], p=[0.4, 0.3, 0.3])# 生成对应大小和颜色size = np.random.uniform(*fruit_rules[fruit]['大小范围'])color = np.random.choice(fruit_rules[fruit]['可能颜色'])# 添加到数据中data['大小(cm)'].append(round(size, 1))data['颜色'].append(color)data['水果名称'].append(fruit)# 创建DataFrame
df = pd.DataFrame(data)# 保存为CSV文件
df.to_csv('水果数据集.csv', index=False)
print(df.head(10))  # 查看前10行

运行结果

2. 数据预处理

2.1 将颜色(分类特征)转换为数值
from sklearn.preprocessing import LabelEncoder# 对颜色列进行编码
encoder_color = LabelEncoder()
df['颜色编码'] = encoder_color.fit_transform(df['颜色'])# 查看编码映射(可选)
print("颜色编码映射:", dict(zip(encoder_color.classes_, encoder_color.transform(encoder_color.classes_))))

运行结果

2.2 特征标准化(可选,根据模型需求)——注意这个是可选

from sklearn.preprocessing import StandardScaler# 标准化大小和颜色编码
scaler = StandardScaler()
X_scaled = scaler.fit_transform(df[['大小(cm)', '颜色编码']])
print("\n合并后的完整数据:")
print(df.head())

运行结果

3. 划分训练集和测试集

from sklearn.model_selection import train_test_split# 特征和标签
X = df[['大小(cm)', '颜色编码']]  # 或使用 X_scaled
y = df['水果名称']# 划分数据集(80%训练,20%测试)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 输出形状和部分数据
print("训练集特征形状:", X_train.shape)
print("测试集特征形状:", X_test.shape)
print("\n训练集特征(前5行):\n", X_train.head(5))  # 显示前5行
print("\n测试集特征(前5行):\n", X_test.head(5))   # 显示前5行
print("\n测试集实际占比:", len(X_test) / (len(X_train) + len(X_test)))

运行结果

4. 选择并训练模型

以随机森林(适合分类任务)为例:

from sklearn.ensemble import RandomForestClassifier# 初始化模型
model = RandomForestClassifier(n_estimators=100, random_state=42)# 训练模型
model.fit(X_train, y_train)

运行结果

5. 评估模型性能

from sklearn.metrics import accuracy_score, classification_report# 预测测试集
y_pred = model.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率: {accuracy:.2f}")# 详细分类报告
print(classification_report(y_test, y_pred))

运行结果

6. 优化模型(网格搜索调参)

from sklearn.model_selection import GridSearchCV# 定义参数网格
param_grid = {'n_estimators': [50, 100, 200],'max_depth': [None, 5, 10]
}# 网格搜索
grid_search = GridSearchCV(RandomForestClassifier(random_state=42), param_grid, cv=5)
grid_search.fit(X_train, y_train)# 最佳参数和模型
print("最佳参数:", grid_search.best_params_)
best_model = grid_search.best_estimator_

运行结果

7. 保存模型并预测新数据

7.1 保存模型
import joblib# 保存模型和编码器
joblib.dump(best_model, '水果分类模型.pkl')
joblib.dump(encoder_color, '颜色编码器.pkl')

运行结果

7.2 加载模型并预测
# 加载模型和编码器
loaded_model = joblib.load('水果分类模型.pkl')
loaded_encoder = joblib.load('颜色编码器.pkl')# 新数据示例
new_data = pd.DataFrame({'大小(cm)': [7.5, 20.0, 2.0],'颜色': ['红', '黄', '紫']
})# 预处理新数据
new_data['颜色编码'] = loaded_encoder.transform(new_data['颜色'])
X_new = new_data[['大小(cm)', '颜色编码']]# 预测
predictions = loaded_model.predict(X_new)
print("预测结果:", predictions)

运行结果

ok,机器学习的简单应用我们已经初步学会的流程,接下来就可以开始做项目👍

相关文章:

  • 2025.4.20机器学习笔记:文献阅读
  • 【Leetcode 每日一题】2176. 统计数组中相等且可以被整除的数对
  • 快速上手,OceanBase + MCP + LLM,搭建 AI 应用
  • 指形铣刀的结构
  • Vue3+Vite+TypeScript+Element Plus开发-20.按钮权限
  • JavaScript-立即执行函数(Immediately Invoked Function Expression,IIFE)
  • 大模型在胃十二指肠溃疡预测及诊疗方案制定中的应用研究
  • 大M法处理非线性约束线性化
  • C语言数据类型取值范围
  • DataInputStream 终极解析与记忆指南
  • 期货跟单软件云端部署的重要性
  • 足球AI模型:一款用数据分析赛事的模型
  • vue入门:路由 router
  • 深度理解指针之例题
  • LeetCode算法题(Go语言实现)_51
  • 2025年考取特种设备安全管理 A 证,开启职业新征程
  • 依赖文件导入不进来
  • 科学视角下的打坐:身心获益的实证探究
  • 三款注册表清理工具
  • 深度学习模型
  • 专访|200余起诉讼,特朗普上台100天,美国已进入宪政危机
  • 癌症来临前,可能伪装成这几种常见病,千万别大意
  • 金科股份:去年营收约275亿元,今年确保所有项目“零烂尾”
  • 宁夏民政厅原厅长欧阳艳已任自治区政府副秘书长、办公厅主任
  • 纪念|海上金石学的兴盛与王昶《金石萃编》
  • 港理大公布多项AI+医工成果,助港建设国际医疗创新枢纽