💫 逻辑回归
逻辑回归(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.加载数据集
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)
- 创建并训练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})")
🎯 下期预告
- 决策树实战:预测泰坦尼克号幸存者
- 模型可视化:直观理解决策过程
- 特征工程:提升模型准确率的技巧
🚀 动手尝试:
- 调整 KNN 的 k 值观察准确率变化
- 为购车预测添加新特征(如存款金额)
- 尝试其他分类算法(如 SVM)
💬 欢迎在评论区分享你的实验成果!