Sklearn机器学习经典案例详细源码
1. 分类任务:鸢尾花分类(K近邻算法)
# 导入所需库
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, classification_report
# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target # X: 特征, y: 标签
# 划分训练集和测试集(80%训练,20%测试)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建K近邻分类器(K=3)
knn = KNeighborsClassifier(n_neighbors=3)
# 训练模型
knn.fit(X_train, y_train)
# 预测测试集
y_pred = knn.predict(X_test)
# 评估模型
print("准确率:", accuracy_score(y_test, y_pred))
print("分类报告:\n", classification_report(y_test, y_pred, target_names=iris.target_names))
2. 回归任务:波士顿房价预测(线性回归)
# 导入所需库
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
# 加载数据集
boston = load_boston()
X, y = boston.data, boston.target # X: 房屋特征, y: 房价
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建线性回归模型
lr = LinearRegression()
# 训练模型
lr.fit(X_train, y_train)
# 预测测试集
y_pred = lr.predict(X_test)
# 评估模型
print("均方误差 (MSE):", mean_squared_error(y_test, y_pred))
print("决定系数 (R²):", r2_score(y_test, y_pred))
3. 聚类任务:手写数字聚类(K均值算法)
# 导入所需库
from sklearn.datasets import load_digits
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# 加载手写数字数据集
digits = load_digits()
X = digits.data # 每个样本为8x8像素的图像展平为64维向量
# 使用K均值聚类(K=10)
kmeans = KMeans(n_clusters=10, random_state=42)
kmeans.fit(X)
# 可视化聚类中心
cluster_centers = kmeans.cluster_centers_.reshape(10, 8, 8)
fig, axes = plt.subplots(2, 5, figsize=(8, 3))
for ax, center in zip(axes.flat, cluster_centers):
ax.imshow(center, cmap='gray')
ax.axis('off')
plt.suptitle("KMeans Cluster Centers (Digits)")
plt.show()
4. 分类任务:文本分类(朴素贝叶斯)
# 导入所需库
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
# 加载数据集(仅选取4个类别)
categories = ['alt.atheism', 'talk.religion.misc', 'comp.graphics', 'sci.space']
newsgroups = fetch_20newsgroups(subset='train', categories=categories)
X_train, y_train = newsgroups.data, newsgroups.target
# 构建文本分类流水线(TF-IDF向量化 + 朴素贝叶斯)
model = make_pipeline(TfidfVectorizer(), MultinomialNB())
model.fit(X_train, y_train)
# 测试新样本
test_samples = [
"God is love. I believe in God.",
"Quantum physics is fascinating. Light behaves like a wave and a particle.",
]
predictions = model.predict(test_samples)
print("预测类别:", predictions)
5、 降维与可视化:手写数字降维(PCA + t-SNE)
# 导入所需库
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
# 加载手写数字数据集
digits = load_digits()
X, y = digits.data, digits.target
# PCA降维到2D
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# t-SNE降维到2D
tsne = TSNE(n_components=2, random_state=42)
X_tsne = tsne.fit_transform(X)
# 可视化
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
axes[0].scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='tab10', s=10)
axes[0].set_title("PCA (2D)")
axes[1].scatter(X_tsne[:, 0], X_tsne[:, 1], c=y, cmap='tab10', s=10)
axes[1].set_title("t-SNE (2D)")
plt.show()
关键点说明
数据预处理:
使用 StandardScaler 或 MinMaxScaler 对数据进行标准化/归一化。
文本数据需用 TfidfVectorizer 转换为数值特征。
模型选择:
分类任务: KNeighborsClassifier 、 SVC 、 MultinomialNB 。
回归任务: LinearRegression 、 RandomForestRegressor 。
聚类任务: KMeans 、 DBSCAN 。
评估指标:
分类:准确率、F1分数、混淆矩阵。
回归:均方误差 (MSE)、R²、MAE。
可视化:
使用 matplotlib 绘制聚类中心、降维结果、混淆矩阵等。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)