【Python学习】人工智能-基于Python的监督学习
监督学习是机器学习的一个重要分支,其核心目标是通过已知的训练数据(包括输入和对应的输出)来学习一个映射函数,使其能够对未知的数据进行有效的预测。Python 作为一种高级编程语言,结合丰富的机器学习库,为监督学习任务提供了强大的支持。本文将详细介绍如何使用 Python 进行监督学习,包括基础知识、常用库、数据预处理、模型训练和评估等。
1. 监督学习基础知识
监督学习的目标是通过已知的输入特征和对应的标签来训练模型,使其能够对新的输入数据进行准确的预测。监督学习任务主要分为两类:分类和回归。
1.1 分类
分类任务的目标是将输入数据划分为预定义的类别。例如,判断一封电子邮件是否为垃圾邮件,或者识别一张图片中的物体。
1.2 回归
回归任务的目标是预测一个连续值。例如,预测房价、股票价格等。
2. 常用监督学习库
Python 生态中有多个强大的监督学习库,每个库都有其独特的功能和优势。
2.1 Scikit-Learn
Scikit-Learn 是一个功能强大的机器学习库,提供了丰富的监督学习算法。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# 加载数据集
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)
# 特征缩放
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 创建逻辑回归模型
model = LogisticRegression()
# 训练模型
model.fit(X_train_scaled, y_train)
# 预测
y_pred = model.predict(X_test_scaled)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
2.2 TensorFlow
TensorFlow 是一个开源的机器学习框架,特别适用于深度学习任务。
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 加载数据集
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)
# 特征缩放
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 创建模型
model = Sequential([
Dense(10, input_shape=(4,), activation='relu'),
Dense(10, activation='relu'),
Dense(3, activation='softmax')
])
# 编译模型
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# 训练模型
model.fit(X_train_scaled, y_train, epochs=50, batch_size=10)
# 评估模型
loss, accuracy = model.evaluate(X_test_scaled, y_test)
print(f'Accuracy: {accuracy}')
2.3 PyTorch
PyTorch 是另一个流行的深度学习框架,提供了灵活的张量计算和自动微分功能。
import torch
import torch.nn as nn
import torch.optim as optim
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 加载数据集
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)
# 特征缩放
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 转换为 PyTorch 张量
X_train_tensor = torch.tensor(X_train_scaled, dtype=torch.float32)
y_train_tensor = torch.tensor(y_train, dtype=torch.long)
X_test_tensor = torch.tensor(X_test_scaled, dtype=torch.float32)
y_test_tensor = torch.tensor(y_test, dtype=torch.long)
# 定义模型
class IrisClassifier(nn.Module):
def __init__(self):
super(IrisClassifier, self).__init__()
self.fc1 = nn.Linear(4, 10)
self.fc2 = nn.Linear(10, 10)
self.fc3 = nn.Linear(10, 3)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = torch.relu(self.fc2(x))
x = self.fc3(x)
return x
# 创建模型实例
model = IrisClassifier()
# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.01)
# 训练模型
for epoch in range(100):
optimizer.zero_grad()
outputs = model(X_train_tensor)
loss = criterion(outputs, y_train_tensor)
loss.backward()
optimizer.step()
# 评估模型
with torch.no_grad():
outputs = model(X_test_tensor)
_, predicted = torch.max(outputs, 1)
accuracy = (predicted == y_test_tensor).sum().item() / len(y_test_tensor)
print(f'Accuracy: {accuracy}')
3. 数据预处理
数据预处理是监督学习任务的重要步骤,包括数据清洗、特征选择、特征缩放等操作。
3.1 数据清洗
数据清洗包括处理缺失值、异常值和重复值等。
import pandas as pd
import numpy as np
# 加载数据
data = pd.read_csv('data.csv')
# 处理缺失值
data.fillna(data.mean(), inplace=True)
# 删除重复值
data.drop_duplicates(inplace=True)
# 删除异常值
z_scores = (data - data.mean()) / data.std()
data = data[(np.abs(z_scores) < 3).all(axis=1)]
3.2 特征选择
特征选择是从原始特征中选择对模型最有帮助的特征。
from sklearn.feature_selection import SelectKBest, f_classif
# 选择最佳的 k 个特征
selector = SelectKBest(score_func=f_classif, k=2)
X_new = selector.fit_transform(X, y)
3.3 特征缩放
特征缩放是将特征值缩放到相同的范围,以避免某些特征对模型的影响过大。
from sklearn.preprocessing import StandardScaler
# 特征缩放
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
4. 模型训练与评估
模型训练是监督学习任务的核心,包括数据准备、模型定义、编译、训练和评估等步骤。
4.1 数据准备
数据准备包括数据加载、预处理和增强等操作。
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 加载数据
data = pd.read_csv('data.csv')
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(data[['feature1', 'feature2']], data['label'], test_size=0.2, random_state=42)
# 特征缩放
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
4.2 模型定义
模型定义包括选择合适的网络结构和层数。
from sklearn.linear_model import LogisticRegression
# 创建逻辑回归模型
model = LogisticRegression()
4.3 编译模型
编译模型包括选择合适的优化器、损失函数和评估指标。
# 训练模型
model.fit(X_train_scaled, y_train)
4.4 训练模型
训练模型包括指定训练轮数、批量大小和验证数据。
# 预测
y_pred = model.predict(X_test_scaled)
4.5 评估模型
评估模型包括计算准确率、损失等指标。
from sklearn.metrics import accuracy_score, classification_report
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
# 打印分类报告
report = classification_report(y_test, y_pred)
print(report)
5. 监督学习应用案例
监督学习在多个领域都有广泛的应用,包括文本分类、情感分析、图像识别等。
5.1 文本分类
文本分类是监督学习的一个基本任务,目标是识别文本的类别。
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report
# 加载数据
data = pd.read_csv('text_data.csv')
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(data['text'], data['label'], test_size=0.2, random_state=42)
# 特征提取
vectorizer = TfidfVectorizer()
X_train_vec = vectorizer.fit_transform(X_train)
X_test_vec = vectorizer.transform(X_test)
# 创建朴素贝叶斯分类器
model = MultinomialNB()
# 训练模型
model.fit(X_train_vec, y_train)
# 预测
y_pred = model.predict(X_test_vec)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
# 打印分类报告
report = classification_report(y_test, y_pred)
print(report)
5.2 情感分析
情感分析是识别文本情感倾向的任务。
from transformers import pipeline
# 加载情感分析模型
sentiment_analyzer = pipeline("sentiment-analysis")
# 分析文本
text = "I love this movie!"
result = sentiment_analyzer(text)
print(result)
5.3 图像识别
图像识别是识别图像中物体的任务。
import tensorflow as tf
from tensorflow.keras.applications import VGG16
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.models import Sequential
from tensorflow.keras.optimizers import Adam
from sklearn.model_selection import train_test_split
# 加载数据
(X_train, y_train), (X_test, y_test) = tf.keras.datasets.mnist.load_data()
# 数据预处理
X_train = X_train.reshape(-1, 28, 28, 1).astype('float32') / 255.0
X_test = X_test.reshape(-1, 28, 28, 1).astype('float32') / 255.0
# 划分训练集和验证集
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=42)
# 创建模型
base_model = VGG16(weights=None, include_top=False, input_shape=(28, 28, 1))
model = Sequential([
base_model,
Flatten(),
Dense(128, activation='relu'),
Dense(10, activation='softmax')
])
# 编译模型
model.compile(optimizer=Adam(), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# 训练模型
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_val, y_val))
# 评估模型
loss, accuracy = model.evaluate(X_test, y_test)
print(f'Accuracy: {accuracy}')
6. 总结
通过本文,你应该已经学会了如何使用 Python 进行监督学习,包括基础知识、常用库、数据预处理、模型训练和评估等。监督学习是一个不断发展的领域,希望本文能为你提供一个良好的起点,助你在监督学习的道路上取得更大的进步。
更多推荐
所有评论(0)