机器学习是人工智能的一个分支,它使计算机能够从数据中学习,而无需显式编程。
线性代数是机器学习的基础,涉及向量、矩阵和线性变换等概念。
import numpy as np # 向量 v = np.array([1, 2, 3]) # 矩阵 M = np.array([[1, 2], [3, 4]]) # 矩阵乘法 result = np.dot(M, v[:2]) print(result)
微积分在机器学习中用于优化算法,特别是梯度下降法。
# 简单的导数计算
def derivative(f, x, h=1e-6):
return (f(x + h) - f(x - h)) / (2 * h)
# 测试
def f(x):
return x**2
print(derivative(f, 2)) # 应该输出约 4.0
概率与统计用于模型评估和不确定性量化。
import numpy as np
import scipy.stats as stats
# 生成正态分布数据
data = np.random.normal(0, 1, 1000)
# 计算均值和标准差
mean = np.mean(data)
std = np.std(data)
# 计算概率密度函数
x = np.linspace(-4, 4, 100)
pdf = stats.norm.pdf(x, mean, std)
print(f"Mean: {mean:.2f}, Std: {std:.2f}")
线性回归用于预测连续值,假设特征与目标之间存在线性关系。
from sklearn.linear_model import LinearRegression import numpy as np # 生成数据 X = np.array([[1], [2], [3], [4], [5]]) y = np.array([2, 4, 6, 8, 10]) # 创建并训练模型 model = LinearRegression() model.fit(X, y) # 预测 print(model.predict([[6]])) # 应该输出约 [12]
逻辑回归用于分类问题,将线性回归的输出映射到 [0, 1] 区间。
from sklearn.linear_model import LogisticRegression import numpy as np # 生成二分类数据 X = np.array([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7]]) y = np.array([0, 0, 0, 1, 1, 1]) # 创建并训练模型 model = LogisticRegression() model.fit(X, y) # 预测 print(model.predict([[3.5, 4.5]])) # 应该输出类别
决策树通过递归地将数据划分为子集来构建模型。
from sklearn.tree import DecisionTreeClassifier import numpy as np # 生成数据 X = np.array([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7]]) y = np.array([0, 0, 0, 1, 1, 1]) # 创建并训练模型 model = DecisionTreeClassifier() model.fit(X, y) # 预测 print(model.predict([[3.5, 4.5]]))
随机森林是决策树的集成,通过投票提高模型性能。
from sklearn.ensemble import RandomForestClassifier import numpy as np # 生成数据 X = np.array([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7]]) y = np.array([0, 0, 0, 1, 1, 1]) # 创建并训练模型 model = RandomForestClassifier(n_estimators=10) model.fit(X, y) # 预测 print(model.predict([[3.5, 4.5]]))
K-均值聚类将数据分为 K 个簇,使簇内距离最小,簇间距离最大。
from sklearn.cluster import KMeans import numpy as np # 生成数据 X = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]]) # 创建并训练模型 kmeans = KMeans(n_clusters=2) kmeans.fit(X) # 预测 print(kmeans.predict([[0, 0], [10, 10]]))
PCA 用于降维,保留数据的主要变异性。
from sklearn.decomposition import PCA
import numpy as np
# 生成高维数据
X = np.random.rand(100, 10)
# 创建并训练模型
pca = PCA(n_components=2)
X_reduced = pca.fit_transform(X)
print(f"原始维度: {X.shape}")
print(f"降维后维度: {X_reduced.shape}")
神经网络由神经元组成,通过前向传播和反向传播进行学习。
TensorFlow 是 Google 开发的深度学习框架。
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# 创建简单的神经网络模型
model = Sequential([
Dense(64, activation='relu', input_shape=(10,)),
Dense(32, activation='relu'),
Dense(1, activation='sigmoid')
])
# 编译模型
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
# 查看模型结构
model.summary()
PyTorch 是 Facebook 开发的深度学习框架,以动态计算图著称。
import torch
import torch.nn as nn
# 创建简单的神经网络模型
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(10, 64)
self.fc2 = nn.Linear(64, 32)
self.fc3 = nn.Linear(32, 1)
self.relu = nn.ReLU()
self.sigmoid = nn.Sigmoid()
def forward(self, x):
x = self.relu(self.fc1(x))
x = self.relu(self.fc2(x))
x = self.sigmoid(self.fc3(x))
return x
# 创建模型实例
model = SimpleNN()
print(model)
交叉验证用于评估模型的泛化能力。
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
import numpy as np
# 生成数据
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7]])
y = np.array([0, 0, 0, 1, 1, 1])
# 创建模型
model = LogisticRegression()
# 5折交叉验证
scores = cross_val_score(model, X, y, cv=5)
print(f"交叉验证分数: {scores}")
print(f"平均分数: {scores.mean()}")
特征选择用于选择对模型最有贡献的特征。
from sklearn.feature_selection import SelectKBest, f_regression
import numpy as np
# 生成数据
X = np.random.rand(100, 10)
y = np.random.rand(100)
# 选择K个最佳特征
selector = SelectKBest(f_regression, k=5)
X_new = selector.fit_transform(X, y)
print(f"原始特征数: {X.shape[1]}")
print(f"选择后特征数: {X_new.shape[1]}")
特征缩放用于将不同尺度的特征标准化。
from sklearn.preprocessing import StandardScaler, MinMaxScaler
import numpy as np
# 生成数据
X = np.array([[1, 100], [2, 200], [3, 300], [4, 400], [5, 500]])
# 标准缩放 (均值为0,标准差为1)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
print("标准缩放结果:")
print(X_scaled)
# 最小最大缩放 (范围 [0, 1])
min_max_scaler = MinMaxScaler()
X_minmax = min_max_scaler.fit_transform(X)
print("\n最小最大缩放结果:")
print(X_minmax)
ml-project/ ├── data/ # 数据文件夹 │ ├── raw/ # 原始数据 │ ├── processed/ # 处理后的数据 ├── models/ # 模型文件夹 │ ├── trained/ # 训练好的模型 │ ├── scripts/ # 模型训练脚本 ├── notebooks/ # Jupyter notebooks ├── src/ # 源代码 │ ├── data/ # 数据处理代码 │ ├── features/ # 特征工程代码 │ ├── models/ # 模型定义代码 │ ├── evaluation/ # 模型评估代码 ├── README.md # 项目说明 ├── requirements.txt # 依赖包列表
过拟合: 模型在训练数据上表现良好,但在测试数据上表现差。
解决方案: 增加数据量、使用正则化、减少模型复杂度、使用 dropout 等。
欠拟合: 模型在训练数据和测试数据上表现都差。
解决方案: 增加模型复杂度、添加更多特征、减少正则化等。
数据不平衡: 不同类别的样本数量差异很大。
解决方案: 过采样、欠采样、使用加权损失函数等。