Python 机器学习核心算法实践案例
目录
- 📈 回归算法
- 1.1 线性回归
- 1.2 逻辑回归
- 📊 分类算法
- 2.1 K近邻
- 2.2 支持向量机(SVM)
- 2.3 决策树与随机森林
- 🔍 聚类算法
- 3.1 K均值与层次聚类
- 3.2 DBSCAN
- 🤖 集成学习
- 4.1 随机森林
- 4.2 梯度提升机(XGBoost与LightGBM)
1. 📈 回归算法
1.1 线性回归
线性回归是最基础的回归算法,广泛应用于预测问题。模型假设输出变量与输入变量之间存在线性关系。实现时,需注意数据预处理和特征选择。使用 scikit-learn
库进行线性回归的代码如下:
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(0)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建并训练模型
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:.2f}")
该代码首先生成了一些示例数据,然后利用线性回归模型进行训练和预测,最后计算预测误差。关键在于数据的分割与模型的训练过程。
1.2 逻辑回归
逻辑回归是一种分类算法,适用于二分类问题。它通过逻辑函数将线性组合转化为概率值。以下是一个使用逻辑回归进行分类的示例:
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
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 = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)
# 进行预测
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率: {accuracy:.2f}")
这里通过 scikit-learn
库加载鸢尾花数据集,并应用逻辑回归模型进行训练和测试,准确率是评估模型性能的重要指标。
2. 📊 分类算法
2.1 K近邻
K近邻(KNN)是一种简单且有效的分类算法,其基本思想是通过计算距离来确定分类。以下是K近邻的实现案例:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report
# 加载数据
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 = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train, y_train)
# 进行预测
y_pred = model.predict(X_test)
# 输出分类报告
print(classification_report(y_test, y_pred))
该示例展示了如何使用K近邻算法进行分类,分类报告提供了更全面的评估指标,包括精确率和召回率。
2.2 支持向量机(SVM)
支持向量机(SVM)是一种强大的分类算法,旨在找到最佳超平面以分离不同类别。以下是SVM的实现示例:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
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 = SVC(kernel='linear')
model.fit(X_train, y_train)
# 进行预测
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率: {accuracy:.2f}")
该代码通过SVM模型进行分类,使用线性核函数来进行数据拟合,最终评估模型的准确性。
2.3 决策树与随机森林
决策树是一种易于解释的分类算法,而随机森林则是多棵决策树的集成,能有效降低过拟合风险。以下是随机森林的实现示例:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
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 = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train)
# 进行预测
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率: {accuracy:.2f}")
该示例使用随机森林进行分类,通过多棵树的投票机制提高预测的稳健性,并有效降低过拟合。
3. 🔍 聚类算法
3.1 K均值与层次聚类
K均值是一种常用的聚类算法,旨在将数据分为K个簇。层次聚类则提供了不同层次的聚类结果。以下是K均值的实现示例:
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# 生成示例数据
X, y_true = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)
# 创建K均值模型
kmeans = KMeans(n_clusters=4)
y_kmeans = kmeans.fit_predict(X)
# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75)
plt.show()
在此示例中,首先生成随机数据,并使用K均值算法进行聚类,最后通过可视化展示聚类效果。
3.2 DBSCAN
DBSCAN是一种基于密度的聚类算法,适用于发现形状不规则的簇。以下是DBSCAN的实现示例:
from sklearn.datasets import make_moons
from sklearn.cluster import DBSCAN
import matplotlib.pyplot as plt
# 生成示例数据
X, _ = make_moons(n_samples=300, noise=0.1)
# 创建DBSCAN模型
dbscan = DBSCAN(eps=0.2, min_samples=5)
y_dbscan = dbscan.fit_predict(X)
# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=y_dbscan, s=50, cmap='viridis')
plt.title('DBSCAN Clustering')
plt.show()
此示例通过DBSCAN进行聚类,能够有效发现不规则形状的聚类结构。
4. 🤖 集成学习
4.1 随机森林
随机森林是集成学习的一种形式,通过组合多棵决策树提高预测性能。以下是随机森林的应用示例:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
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 = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train)
# 进行预测
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率: {accuracy:.2f}")
在此示例中,使用随机森林进行分类,显示其在多棵决策树集成后的高效性和准确率。
4.2 梯度提升机(XGBoost与LightGBM)
XGBoost和LightGBM是两种高效的梯度提升框架,广泛应用于机器学习竞赛和实际应用中。以下是XGBoost的实现示例:
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=42)
# 创建DMatrix
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test)
# 设置参数
params = {
'objective': 'multi:softmax',
'num_class': 3,
'eta': 0.1,
'max_depth': 3
}
# 训练模型
bst = xgb.train(params, dtrain, num_boost_round=10)
# 进行预测
y_pred = bst.predict(dtest)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率: {accuracy:.2f}")
该示例展示了如何使用XGBoost进行多分类任务,充分展现了其高效性和灵活性。