♊️ 机器学习分类入门:从买车预测到花朵识别全流程,准确率 96%!

💫 逻辑回归

逻辑回归(Logistic Regression):是一个 分类 算法,通常用于二分类

二分类问题:自变量有一个或多个,因变量的结果只有两种,通常为 0 和 1

环境配置参考上一篇文章 ♐️ 零基础入门机器学习!从线性回归开始,30 分钟实现简单的机器学习预测

💼 案例:预测购车行为

1.观察数据集

  • 特征:年龄、月薪
  • 目标:是否买车(0 = 不买,1 = 买)

在这里插入图片描述

2.取出训练数据

读取年龄、月收入作为 X 数据(二维), 是否买车作为 Y 数据

data = pd.read_csv('car.csv')
X_data = data[['age', 'salary']].values
Y_data = data['car'].values

3.使用模型

# 导入逻辑回归类, 并创建一个逻辑回归对象
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr.fit(X_data, Y_data)  # 给此对象传入 X、Y 数据进行学习

4.模拟数据并预测

模拟三组数据,分别是年龄 28,薪资 8;年龄 30,薪资 10;年龄 32,薪资 5

testX = [[28, 8], [30, 10], [32, 5]]
Y_pred = lr.predict(testX)
print("0表示未买车, 1表示已买车:", Y_pred)

在这里插入图片描述

运行程序,发现数据合理,说明该模型的预测结果具有一定可信度。

5.查看详细概率

通过 predi_proba 函数,还可以查看每个分类的具体概率

testX = [[28, 8], [30, 10], [32, 5]]
y_pred = lr.predict_proba(testX)

在这里插入图片描述

第一个人买车的概率约为 64%,不买的概率为 36%;第二个人买车的概率是 90%;第三个只有 15%。

💡 关键理解:

  • 输出概率更有利于业务决策
  • 适合营销场景的客户分群

6.完整代码

import pandas as pd

# 读取年龄、月收入、是否买车
data = pd.read_csv('car.csv')
X_data = data[['age', 'salary']].values
Y_data = data['car'].values

# 导入逻辑回归类, 并创建一个逻辑回归对象
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr.fit(X_data, Y_data)  # 给此对象传入X、Y数据进行学习

# 拟一些测试数据, 让模型判断是否买车
testX = [[28, 8], [30, 10], [32, 5]]
Y_pred = lr.predict(testX)
print("0表示未买车, 1表示已买车:", Y_pred)  # [1 1 0]

# 通过 predi_proba 函数查看具体概率
y_pred = lr.predict_proba(testX)
print("没买车和买车的概率:\n", y_pred)

🎎 KNN 分类

K最近邻(K-Nearest Neighbors, KNN) 是一种简单直观的 监督学习 算法,既可用于 分类,也可用于 回归

为什么使用KNN?

✅ 优点

  1. 简单易用
  2. 无需假设数据分布
  3. 自然处理多分类问

🌸 案例:鸢尾花分类

1.加载数据集

iris 数据集是用来给花做分类的数据集。

from sklearn.datasets import load_iris
# 利用 train_test_split 划分数据集
from sklearn.model_selection import train_test_split

# 加载数据
iris_dataset = load_iris()

print(iris_dataset.target_names)  # 输出类别名称

数据集结构:

  • 4个特征:花萼 / 花瓣的长度宽度
  • 3个类别:setosa、versicolor、virginica

在这里插入图片描述

在这里插入图片描述

本节会使用 KNN 分类器模型,根据这 4 个特征来判断样本属于上述哪一类鸢尾花。

2.取出训练数据

X = iris_dataset['data']  # 特征数据(花萼长度、花萼宽度、花瓣长度、花瓣宽度)
Y = iris_dataset['target']  # 类别数据(0:setosa, 1:versicolor, 2:virginica)

3.拆分数据集

训练集占 80%,用于训练模型,让模型学习数据特征和类别的关系,是模型 “学习” 的基础数据。

测试集占 20%,用于评估模型性能,测试模型对未知数据的预测能力,模拟真实场景中遇到的新数据。

💡 类比理解

  • 训练集 = 平时做的练习题(用来学习知识点)。
  • 测试集 = 期末考试(检验学习效果,题目是新的)。
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.20, random_state=0)
  1. 创建并训练KNN模型
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

5.进行预测

y_pred = knn.predict(X_test)

6.展示结果

  • 遍历每个测试样本,比较模型预测值 (y_pred) 和真实值 (y_test
  • 表示预测正确, 表示错误。
correct_count = 0
for i in range(len(y_pred)):
    is_correct = "✓" if y_pred[i] == y_test[i] else "✗"
    if is_correct == "✓":
        correct_count += 1
    print(f"{iris_dataset.target_names[y_pred[i]]}\t{iris_dataset.target_names[y_test[i]]}\t{is_correct}")

在这里插入图片描述

每一行代表一个测试样本的预测情况,直观展示模型的表现。

7.查看准确率

accuracy = correct_count / len(y_pred)
print("\n=== 模型性能 ===")
print(f"测试样本总数: {len(y_pred)}")
print(f"正确预测数: {correct_count}")
print(f"准确率: {accuracy:.2%} ({knn.score(X_test, y_test):.4f})")

在这里插入图片描述

KNN 的分类效果十分可靠,在无优化的情况下,准确率达到了 96%

8.完整代码

"""
* @描述: Knn分类预测
* @File: Knn.py
* ======★★★
* @作者: 星队
* ======★★★
* @创建时间: 2025-05-16 16:30
"""

# 导入必要的库
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

# 1. 加载鸢尾花数据集
iris_dataset = load_iris()

# 2. 准备数据
print("\n数据集包含以下三类鸢尾花:")
print(iris_dataset.target_names)  # 输出类别名称

X = iris_dataset['data']  # 特征数据(花萼长度、花萼宽度、花瓣长度、花瓣宽度)
Y = iris_dataset['target']  # 类别数据(0:setosa, 1:versicolor, 2:virginica)

# 3. 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.20, random_state=0)

# 4. 创建并训练KNN模型
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# 5. 进行预测
y_pred = knn.predict(X_test)

# 6. 展示结果
print("\n=== 预测结果 ===")
print("预测类别\t真实类别\t是否正确")
print("----------------------------")
correct_count = 0
for i in range(len(y_pred)):
    is_correct = "✓" if y_pred[i] == y_test[i] else "✗"
    if is_correct == "✓":
        correct_count += 1
    print(f"{iris_dataset.target_names[y_pred[i]]}\t{iris_dataset.target_names[y_test[i]]}\t{is_correct}")

# 7. 计算并显示准确率
accuracy = correct_count / len(y_pred)
print("\n=== 模型性能 ===")
print(f"测试样本总数: {len(y_pred)}")
print(f"正确预测数: {correct_count}")
print(f"准确率: {accuracy:.2%} ({knn.score(X_test, y_test):.4f})")

🎯 下期预告

  • 决策树实战:预测泰坦尼克号幸存者
  • 模型可视化:直观理解决策过程
  • 特征工程:提升模型准确率的技巧

🚀 动手尝试:

  1. 调整 KNN 的 k 值观察准确率变化
  2. 为购车预测添加新特征(如存款金额)
  3. 尝试其他分类算法(如 SVM)

💬 欢迎在评论区分享你的实验成果!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值