当前位置: 首页 > news >正文

Scikit-learn高级功能与Python实践

数据预处理的高级技巧

复杂缺失值处理

在实际应用中,数据缺失情况往往较为复杂。除了简单的均值、众数填充外,Scikit-learn提供了更高级的处理方式。例如,使用IterativeImputer进行多重插补,它基于其他特征对缺失值进行预测填充。以下是一个示例代码:

import numpy as np
import pandas as pd
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer# 创建包含缺失值的数据
data = {'A': [1, 2, np.nan, 4], 'B': [5, np.nan, np.nan, 8], 'C': [9, 10, 11, 12]}
df = pd.DataFrame(data)# 初始化迭代插补器
imputer = IterativeImputer(max_iter=10, random_state=0)# 进行插补
imputed_data = imputer.fit_transform(df)
print(imputed_data)

在这个例子中,IterativeImputer通过迭代的方式,利用其他列的信息来填充缺失值,能够更好地处理复杂的缺失数据情况。

特征缩放与归一化

特征缩放是机器学习中非常重要的预处理步骤。Scikit-learn提供了多种缩放方法,如标准化(StandardScaler)、最小最大缩放(MinMaxScaler)等。以标准化为例,代码如下:

from sklearn.preprocessing import StandardScaler# 创建示例数据
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 初始化标准化器
scaler = StandardScaler()# 进行标准化
scaled_data = scaler.fit_transform(data)
print(scaled_data)

标准化后的数据均值为0,方差为1,有助于提升模型的收敛速度和性能。不同的缩放方法适用于不同的数据场景,需要根据具体情况选择合适的方法。

模型选择与评估策略

交叉验证的深入应用

交叉验证是一种常用的模型评估方法,Scikit-learn提供了多种交叉验证方式。其中,KFold是最基础的交叉验证方法之一,它将数据集划分为K个子集,轮流用K - 1个子集作为训练集,1个子集作为测试集。以下是一个使用KFold的示例:

from sklearn.model_selection import KFold
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target# 初始化KFold
kf = KFold(n_splits=5)# 遍历每个折叠进行训练和评估
for train_index, test_index in kf.split(X):X_train, X_test = X[train_index], X[test_index]y_train, y_test = y[train_index], y[test_index]# 初始化模型并训练model = LogisticRegression()model.fit(X_train, y_train)# 在测试集上进行预测并计算准确率accuracy = model.score(X_test, y_test)print(f'Accuracy: {accuracy}')

除了KFold,还有StratifiedKFold,它在划分数据集时会保持每个子集中各类别的比例与原始数据集相同,这对于类别不平衡的数据集非常有用。

超参数调优

超参数对模型的性能有着重要影响。Scikit-learn提供了GridSearchCVRandomizedSearchCV来进行超参数调优。GridSearchCV会遍历所有可能的参数组合,而RandomizedSearchCV则会在给定的参数空间中随机采样一定数量的参数组合进行搜索,效率更高。以下是使用GridSearchCV的示例:

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC# 定义参数网格
param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf']}# 初始化GridSearchCV
grid_search = GridSearchCV(SVC(), param_grid, cv=5)# 进行超参数调优
grid_search.fit(X, y)# 输出最佳参数和最佳得分
print(f'Best Parameters: {grid_search.best_params_}')
print(f'Best Score: {grid_search.best_score_}')

通过超参数调优,可以找到使模型性能最佳的参数组合,从而提升模型的泛化能力。

集成学习与模型融合

投票分类器

投票分类器是一种简单而有效的集成学习方法。它通过多个基分类器的预测结果进行投票,得出最终的分类结果。Scikit-learn提供了VotingClassifier来实现投票分类器。以下是一个示例:

from sklearn.ensemble import VotingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC# 初始化基分类器
clf1 = DecisionTreeClassifier()
clf2 = GaussianNB()
clf3 = SVC(probability=True)# 初始化投票分类器
voting_clf = VotingClassifier(estimators=[('dt', clf1), ('nb', clf2), ('svc', clf3)], voting='soft')# 训练投票分类器
voting_clf.fit(X, y)# 在测试集上进行预测并计算准确率
accuracy = voting_clf.score(X_test, y_test)
print(f'Accuracy: {accuracy}')

在这个例子中,VotingClassifier使用了软投票(voting='soft'),即根据各个基分类器的预测概率进行加权平均,然后选择概率最大的类别作为最终结果。硬投票则是直接根据多数表决结果进行分类。

堆叠泛化

堆叠泛化是一种更复杂的集成学习方法,它将多个基学习器的输出作为新的特征,再使用一个次级学习器进行最终的预测。Scikit-learn提供了StackingClassifierStackingRegressor来实现堆叠泛化。以下是一个简单的示例:

from sklearn.ensemble import StackingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import RandomForestClassifier# 初始化基学习器
clf1 = LogisticRegression()
clf2 = KNeighborsClassifier()
clf3 = RandomForestClassifier()# 初始化堆叠分类器
stacking_clf = StackingClassifier(estimators=[('lr', clf1), ('knn', clf2), ('rf', clf3)], final_estimator=LogisticRegression())# 训练堆叠分类器
stacking_clf.fit(X, y)# 在测试集上进行预测并计算准确率
accuracy = stacking_clf.score(X_test, y_test)
print(f'Accuracy: {accuracy}')

堆叠泛化能够充分利用各个基学习器的优势,进一步提高模型的性能。

无监督学习与降维技术

主成分分析(PCA)

主成分分析是一种常用的降维技术,它可以将高维数据投影到低维空间,同时保留数据的主要特征。Scikit-learn提供了PCA类来实现主成分分析。以下是一个示例:

from sklearn.decomposition import PCA
import matplotlib.pyplot as plt# 创建示例数据
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5]])# 初始化PCA,设置主成分数量为1
pca = PCA(n_components=1)# 进行降维
X_pca = pca.fit_transform(X)# 输出降维后的数据
print(X_pca)# 可视化降维结果(如果维度为2或3可可视化)
# plt.scatter(X_pca[:, 0], X_pca[:, 1])
# plt.show()

在这个例子中,将二维数据降维到一维。PCA通过寻找数据中方差最大的方向,将数据投影到该方向上,从而实现降维。降维后的数据可以用于可视化、特征提取等任务。

t-SNE与UMAP

t-SNE和UMAP是两种常用的非线性降维技术,它们在处理高维数据的可视化方面表现出色。以下是使用t-SNE和UMAP的示例代码:

from sklearn.manifold import TSNE
import umap# 创建示例数据(这里使用鸢尾花数据集)
X = iris.data
y = iris.target# 使用t-SNE进行降维
tsne = TSNE(n_components=2, random_state=0)
X_tsne = tsne.fit_transform(X)# 可视化t-SNE降维结果
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y)
plt.title('t-SNE')
plt.show()# 使用UMAP进行降维
reducer = umap.UMAP(n_components=2)
X_umap = reducer.fit_transform(X)# 可视化UMAP降维结果
plt.scatter(X_umap[:, 0], X_umap[:, 1], c=y)
plt.title('UMAP')
plt.show()

t-SNE和UMAP都能够将高维数据映射到低维空间,并且在处理复杂的数据结构时具有较好的效果。它们在数据探索和可视化方面有着广泛的应用。

http://www.dtcms.com/a/304695.html

相关文章:

  • 军工堡垒机国产化突围:打破国外垄断的三大技术流派
  • vue3项目搭建
  • VIKOR(Multi-criteria Optimization and Compromise Solution)简介与简单示例
  • 无人机图传:让天空视角 “触手可及”
  • Apache Ignite 的分布式原子类型(Atomic Types)
  • 【高阶版】R语言空间分析、模拟预测与可视化高级应用
  • 解密犯罪时间 - 华为OD统一考试(JavaScript 题解)
  • 自定义View和动画学习记录 抓娃娃机View
  • DataParallel (DP) DistributedDataParallel (DDP)
  • 15-TPS65261 4.5V 至 18V 输入电压、3A/2A/2A 输出电流三路同步降压转换器
  • 分布式时序数据库的特点解析
  • Three.js 完整实战项目:构建一个 3D 商品展示空间
  • UE5 打包Windows平台时无法找到SDK的解决方法
  • C# 基于halcon的视觉工作流-章25-椭圆查找
  • 【自动化运维神器Ansible】Ansible常用模块之service模块详解
  • C++ 赋值与交换法则
  • STM32 集成 USB 时出现 HAL_StatusTypeDef 未定义 的错误
  • STM32--DHT11(标准库)驱动开发
  • AI崛起后,对使用AI的一些小思考
  • LaTeX 下载安装保姆级教程
  • 异形设备前端适配挑战:条形屏/嵌入式终端的布局弹性与触控热区重构
  • 直播间里的酒旅新故事:内容正在重构消费链路
  • 亚马逊 Vine 计划:评论生态重构与合规运营策略
  • 《UE教程》第一章第九回——地图BGM
  • Kafka运维实战 17 - kafka 分区副本从 1 增加到 3【实战】
  • 减速机:自动化生产线的“精密传动心脏”
  • 网站备案号被注销了,怎么重新备案
  • 博弈论03——混合纳什均衡的收益求法
  • 76.最小覆盖子串
  • 线性回归原理与进阶