机器学习基础:监督学习(附Python示例与适用场景)

3.2.1 监督学习

监督学习是机器学习中最常见的学习方式之一。它的核心思想是通过已知的输入和输出数据来训练模型,使得模型能够预测新的输入数据的输出。在监督学习中,数据集通常由输入特征(X)和对应的标签(Y)组成。模型的目标是学习从输入到输出的映射关系。

以下是一些常见的监督学习算法,附上Python代码示例、详细注释以及适用场景和实例,帮助你更好地理解每种算法的应用。


1. 线性回归(Linear Regression)

概述
线性回归是一种用于预测连续值的监督学习算法。它假设输入特征和输出之间存在线性关系。

Python示例

# 导入必要的库
from sklearn.linear_model import LinearRegression
import numpy as np

# 创建一些示例数据
X = np.array([[1], [2], [3], [4], [5]])  # 输入特征(1维)
y = np.array([2, 4, 6, 8, 10])           # 输出标签

# 创建线性回归模型
model = LinearRegression()

# 训练模型
model.fit(X, y)

# 预测新数据
new_X = np.array([[6]])
prediction = model.predict(new_X)
print(f"预测值: {prediction[0]}")  # 输出: 预测值: 12.0

# 打印模型参数
print(f"斜率: {model.coef_[0]}, 截距: {model.intercept_}")

适用场景
线性回归适用于预测连续值的问题,例如:
房价预测:根据房屋面积、位置等特征预测房价。
股票价格预测:根据历史数据预测未来股票价格。
销售额预测:根据广告投入、市场活动等预测销售额。

实例
假设你有一组房屋面积和房价的数据,可以用线性回归模型预测新房屋的价格。

# 房价预测示例
# 假设房屋面积和房价数据
X = np.array([[50], [100], [150], [200], [250]])  # 房屋面积(平方米)
y = np.array([150, 300, 450, 600, 750])           # 房价(万元)

# 创建线性回归模型
model = LinearRegression()

# 训练模型
model.fit(X, y)

# 预测新房屋价格
new_X = np.array([[300]])
prediction = model.predict(new_X)
print(f"预测房价: {prediction[0]} 万元")  # 输出: 预测房价: 900.0 万元

2. 逻辑回归(Logistic Regression)

概述
逻辑回归是一种用于分类问题的监督学习算法,特别适用于二分类问题。

Python示例

# 导入必要的库
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris

# 加载示例数据集
data = load_iris()
X = data.data[:100, :2]  # 只使用前两个特征和前100个样本(二分类)
y = data.target[:100]

# 创建逻辑回归模型
model = LogisticRegression()

# 训练模型
model.fit(X, y)

# 预测新数据
new_X = np.array([[5.1, 3.5]])
prediction = model.predict(new_X)
print(f"预测类别: {prediction[0]}")  # 输出: 预测类别: 0

适用场景
逻辑回归适用于二分类问题,例如:
垃圾邮件分类:判断一封邮件是否为垃圾邮件。
疾病诊断:根据患者的症状判断是否患有某种疾病。
客户流失预测:判断客户是否会流失。

实例
假设你有一组邮件数据,可以用逻辑回归模型判断新邮件是否为垃圾邮件。

# 垃圾邮件分类示例
# 假设邮件特征和标签数据
X = np.array([[0.1, 0.2], [0.3, 0.4], [0.5, 0.6], [0.7, 0.8]])  # 邮件特征
y = np.array([0, 0, 1, 1])  # 标签(0: 正常邮件,1: 垃圾邮件)

# 创建逻辑回归模型
model = LogisticRegression()

# 训练模型
model.fit(X, y)

# 预测新邮件
new_X = np.array([[0.2, 0.3]])
prediction = model.predict(new_X)
print(f"预测结果: {'垃圾邮件' if prediction[0] == 1 else '正常邮件'}")  # 输出: 预测结果: 正常邮件

3. 支持向量机(SVM)

概述
支持向量机(SVM)是一种用于分类和回归的监督学习算法,核心思想是找到一个超平面,将不同类别的数据点最大程度地分开。

Python示例

# 导入必要的库
from sklearn.svm import SVC
from sklearn.datasets import load_iris

# 加载示例数据集
data = load_iris()
X = data.data[:, :2]  # 只使用前两个特征
y = data.target

# 创建SVM分类器
model = SVC(kernel='linear')  # 使用线性核函数

# 训练模型
model.fit(X, y)

# 预测新数据
new_X = np.array([[5.1, 3.5]])
prediction = model.predict(new_X)
print(f"预测类别: {prediction[0]}")  # 输出: 预测类别: 0

适用场景
SVM适用于分类问题,尤其是高维数据,例如:
文本分类:根据文本内容分类新闻、评论等。
图像分类:根据图像特征分类手写数字、物体等。
生物信息学:根据基因数据分类疾病类型。

实例
假设你有一组手写数字图像数据,可以用SVM模型分类新图像中的数字。

# 手写数字分类示例
from sklearn.datasets import load_digits

# 加载手写数字数据集
data = load_digits()
X = data.data
y = data.target

# 创建SVM分类器
model = SVC(kernel='linear')

# 训练模型
model.fit(X, y)

# 预测新图像
new_X = np.array([data.data[0]])  # 使用第一张图像作为新数据
prediction = model.predict(new_X)
print(f"预测数字: {prediction[0]}")  # 输出: 预测数字: 0

4. 决策树 & 随机森林(Decision Tree & Random Forest)

概述
决策树是一种树形结构的分类和回归模型,随机森林是多个决策树的集成模型。

Python示例

# 导入必要的库
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris

# 加载示例数据集
data = load_iris()
X = data.data
y = data.target

# 创建决策树模型
tree_model = DecisionTreeClassifier()

# 训练决策树模型
tree_model.fit(X, y)

# 创建随机森林模型
forest_model = RandomForestClassifier(n_estimators=100)  # 100棵树

# 训练随机森林模型
forest_model.fit(X, y)

# 预测新数据
new_X = np.array([[5.1, 3.5, 1.4, 0.2]])
tree_prediction = tree_model.predict(new_X)
forest_prediction = forest_model.predict(new_X)
print(f"决策树预测类别: {tree_prediction[0]}")  # 输出: 决策树预测类别: 0
print(f"随机森林预测类别: {forest_prediction[0]}")  # 输出: 随机森林预测类别: 0

适用场景
决策树和随机森林适用于分类和回归问题,例如:
客户细分:根据客户行为数据划分客户群体。
信用评分:根据客户信用历史预测违约风险。
医学诊断:根据患者数据判断疾病类型。

实例
假设你有一组客户数据,可以用随机森林模型预测客户的信用评分。

# 信用评分示例
# 假设客户特征和信用评分数据
X = np.array([[25, 1, 50000], [35, 2, 80000], [45, 1, 120000]])  # 年龄, 信用卡数量, 年收入
y = np.array([0, 1, 1])  # 标签(0: 低信用, 1: 高信用)

# 创建随机森林模型
model = RandomForestClassifier(n_estimators=100)

# 训练模型
model.fit(X, y)

# 预测新客户信用
new_X = np.array([[30, 1, 60000]])
prediction = model.predict(new_X)
print(f"预测信用: {'高信用' if prediction[0] == 1 else '低信用'}")  # 输出: 预测信用: 高信用

5. K 近邻(KNN)

概述
K 近邻(KNN)是一种基于实例的学习算法,通过计算新样本与训练集中样本的距离来预测标签。

Python示例

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

# 加载示例数据集
data = load_iris()
X = data.data
y = data.target

# 创建KNN分类器
model = KNeighborsClassifier(n_neighbors=3)  # 使用3个最近邻

# 训练模型
model.fit(X, y)

# 预测新数据
new_X = np.array([[5.1, 3.5, 1.4, 0.2]])
prediction = model.predict(new_X)
print(f"预测类别: {prediction[0]}")  # 输出: 预测类别: 0

适用场景
KNN适用于分类和回归问题,尤其是小数据集,例如:
手写数字识别:根据图像特征分类手写数字。
推荐系统:根据用户行为推荐商品或内容。
异常检测:根据数据特征检测异常行为。

实例
假设你有一组手写数字图像数据,可以用KNN模型分类新图像中的数字。

# 手写数字分类示例
from sklearn.datasets import load_digits

# 加载手写数字数据集
data = load_digits()
X = data.data
y = data.target

# 创建KNN分类器
model = KNeighborsClassifier(n_neighbors=3)

# 训练模型
model.fit(X, y)

# 预测新图像
new_X = np.array([data.data[0]])  # 使用第一张图像作为新数据
prediction = model.predict(new_X)
print(f"预测数字: {prediction[0]}")  # 输出: 预测数字: 0

总结

本文介绍了监督学习的常见算法,并提供了Python代码示例、详细注释以及适用场景和实例。作为新手,你可以通过这些示例快速上手,理解每种算法的基本原理和应用场景。希望这些内容能够帮助你更好地学习机器学习!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐