10个常见的机器学习模型实现案例
本文介绍了10种常用机器学习模型的基础原理与实现方法,涵盖监督学习和无监督学习两大类。主要内容包括:线性回归、逻辑回归、决策树、随机森林、支持向量机(SVM)、K近邻(KNN)、梯度提升树(GBDT)、XGBoost、神经网络和K均值聚类。每个模型均从基本原理、实现步骤和代码示例三个维度进行阐述,使用scikit-learn等主流库实现基础功能,并提供了模型评估指标。文章还包含一个完整的K均值聚类
机器学习是数据科学的核心领域,涉及多种算法和方法。本文将介绍10个常用的机器学习模型的基础实现。
1. 线性回归
基本原理
线性回归是一种用于预测连续型变量的模型,通过拟合输入特征与输出变量之间的线性关系来进行预测。
实现过程
-
数据准备:收集并清洗数据。
-
特征选择:选择与目标变量相关的特征。
-
模型训练:使用最小二乘法拟合模型。
-
模型评估:使用均方误差等指标评估模型性能。
代码实现
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# 设置随机种子
np.random.seed(42)
# 生成示例数据
X = np.random.rand(100, 1) * 10
y = 2.5 * X + np.random.randn(100, 1) * 2
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=4)
# 创建模型并训练
model = LinearRegression()
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估
mse = mean_squared_error(y_test, y_pred)
print(f'均方误差: {mse}')
2. 逻辑回归
基本原理
逻辑回归用于二分类问题,通过sigmoid函数将线性组合的输入映射到0和1之间的概率值。
实现过程
-
数据准备:收集并清洗数据。
-
特征选择:选择与目标变量相关的特征。
-
模型训练:使用最大似然估计拟合模型。
-
模型评估:使用准确率、召回率等指标评估模型性能。
代码实现
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# 加载数据集
iris = load_iris()
X = iris.data
y = (iris.target == 0).astype(int) # 二分类
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=4)
# 创建模型并训练
model = LogisticRegression()
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估
accuracy = accuracy_score(y_test, y_pred)
print(f'准确率: {accuracy}')
3. 决策树
基本原理
决策树通过树形结构进行决策,使用特征的值来分割数据,直到达到叶子节点。
实现过程
-
数据准备:收集并清洗数据。
-
特征选择:选择用于分割的特征。
-
模型训练:构建决策树模型。
-
模型评估:使用准确率、F1分数等指标评估模型性能。
代码实现
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=4)
# 创建模型并训练
model = DecisionTreeClassifier(random_state=42)
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估
accuracy = accuracy_score(y_test, y_pred)
print(f'准确率: {accuracy}')
4. 随机森林
基本原理
随机森林是集成学习方法,通过构建多个决策树并结合它们的预测结果来提高模型的准确性和鲁棒性。
实现过程
-
数据准备:收集并清洗数据。
-
特征选择:选择用于训练的特征。
-
模型训练:构建多个决策树并进行投票。
-
模型评估:使用准确率、AUC等指标评估模型性能。
代码实现
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=4)
# 创建模型并训练
model = RandomForestClassifier(random_state=42)
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估
accuracy = accuracy_score(y_test, y_pred)
print(f'准确率: {accuracy}')
5. 支持向量机(SVM)
基本原理
支持向量机通过寻找最佳超平面来分割不同类别的数据点,最大化类别间的间隔。
实现过程
-
数据准备:收集并清洗数据。
-
特征选择:选择用于训练的特征。
-
模型训练:使用核函数将数据映射到高维空间。
-
模型评估:使用准确率、混淆矩阵等指标评估模型性能。
代码实现
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建模型并训练
model = SVC(random_state=42)
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估
accuracy = accuracy_score(y_test, y_pred)
print(f'准确率: {accuracy}')
6. K近邻(KNN)
基本原理
K近邻算法通过计算样本之间的距离来进行分类,选择最近的K个邻居进行投票。
实现过程
-
数据准备:收集并清洗数据。
-
特征选择:选择用于训练的特征。
-
模型训练:存储训练数据。
-
模型评估:使用准确率、F1分数等指标评估模型性能。
代码实现
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=4)
# 创建模型并训练
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估
accuracy = accuracy_score(y_test, y_pred)
print(f'准确率: {accuracy}')
7. 梯度提升树(GBDT)
基本原理
梯度提升树通过逐步构建决策树,每棵树都在前一棵树的基础上进行改进,以减少预测误差。
实现过程
-
数据准备:收集并清洗数据。
-
特征选择:选择用于训练的特征。
-
模型训练:逐步构建决策树。
-
模型评估:使用准确率、AUC等指标评估模型性能。
代码实现
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建模型并训练
model = GradientBoostingClassifier(random_state=42)
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估
accuracy = accuracy_score(y_test, y_pred)
print(f'准确率: {accuracy}')
8. XGBoost
基本原理
XGBoost是梯度提升树的优化版本,具有更高的计算效率和更好的性能。
实现过程
-
数据准备:收集并清洗数据。
-
特征选择:选择用于训练的特征。
-
模型训练:使用XGBoost算法构建模型。
-
模型评估:使用准确率、AUC等指标评估模型性能。
代码实现
import xgboost as xgb
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=4)
# 创建模型并训练
model = xgb.XGBClassifier(random_state=42)
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估
accuracy = accuracy_score(y_test, y_pred)
print(f'准确率: {accuracy}')
9. 神经网络
基本原理
神经网络通过模拟人脑神经元的连接来进行学习,适用于复杂的非线性问题。
实现过程
-
数据准备:收集并清洗数据。
-
特征选择:选择用于训练的特征。
-
模型训练:使用反向传播算法训练网络。
-
模型评估:使用准确率、损失函数等指标评估模型性能。
代码实现
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=4)
# 创建模型并训练
model = MLPClassifier(random_state=4)
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估
accuracy = accuracy_score(y_test, y_pred)
print(f'准确率: {accuracy}')
10. K均值聚类
基本原理
K均值聚类通过将数据点分为K个簇,使得同一簇内的数据点相似度高,而不同簇之间的数据点相似度低。
实现过程
-
数据准备:收集并清洗数据。
-
特征选择:选择用于聚类的特征。
-
模型训练:使用K均值算法进行聚类。
-
模型评估:使用轮廓系数等指标评估聚类效果。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
# 生成模拟数据
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)
# 展示数据分布
plt.scatter(X[:, 0], X[:, 1], s=50)
plt.show()
class KMeans:
def __init__(self, k=3, max_iters=100, plot_steps=False):
self.k = k
self.max_iters = max_iters
self.plot_steps = plot_steps
# 初始化簇心
self.centroids = None
# 标签列表
self.clusters = [[] for _ in range(self.k)]
def _initialize_centroids(self, X):
"""随机选择k个样本作为初始质心"""
idx = np.random.choice(len(X), self.k, replace=False)
self.centroids = X[idx]
def _closest_centroid(self, sample):
"""计算样本到所有质心的距离,返回最近的那个"""
distances = [np.linalg.norm(sample - point) for point in self.centroids]
closest = np.argmin(distances)
return closest
def _create_clusters(self, X):
"""分配每个样本给最近的质心"""
self.clusters = [[] for _ in range(self.k)]
for idx, sample in enumerate(X):
centroid_idx = self._closest_centroid(sample)
self.clusters[centroid_idx].append(idx)
def _calculate_new_centroids(self, X):
"""重新计算新的质心位置"""
centroids = np.zeros((self.k, X.shape[1]))
for i, cluster in enumerate(self.clusters):
new_centroid = np.mean(X[cluster], axis=0)
centroids[i] = new_centroid
return centroids
def predict(self, X):
"""为每个样本分配一个标签"""
self._initialize_centroids(X)
for it in range(self.max_iters):
self._create_clusters(X)
previous_centroids = self.centroids
self.centroids = self._calculate_new_centroids(X)
if self.plot_steps:
self.plot(X, it)
if np.allclose(previous_centroids, self.centroids):
break
# 分配标签
labels = np.empty(len(X))
for cluster_idx, cluster in enumerate(self.clusters):
for sample_idx in cluster:
labels[sample_idx] = cluster_idx
return labels
def plot(self, X, index):
fig, ax = plt.subplots(figsize=(12, 8))
for i, index in enumerate(self.clusters):
point = X[index].T
ax.scatter(*point)
for point in self.centroids:
ax.scatter(*point, marker='x', color='black', linewidth=2)
plt.show()
# 测试KMeans类
if __name__ == "__main__":
classifier = KMeans(k=4, max_iters=150, plot_steps=True)
y_pred = classifier.predict(X)
# 可视化最终结果
fig, ax = plt.subplots(figsize=(12, 8))
for i, index in enumerate(classifier.clusters):
point = X[index].T
ax.scatter(*point)
for point in classifier.centroids:
ax.scatter(*point, marker='x', color='black', linewidth=2)
plt.show()

以上介绍了10个机器学习常用模型的原理及基础实现过程,实际项目中需要加上数据处理、调参等必要的过程,才能实现一个完整的机器学习模型。
最后
如果你真的想学习人工智能,请不要去网上找那些零零碎碎的教程,真的很难学懂!你可以根据我这个学习路线和系统资料,制定一套学习计划,只要你肯花时间沉下心去学习,它们一定能帮到你!
这里也给大家准备了人工智能各个方向的资料,大家可以微信扫码找我领取哈~
也可以微信搜索gupao66回复32无偿获取哦~

更多推荐


所有评论(0)