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

「日拱一码」015 机器学习常用库——scikit-learn

目录

数据预处理

数据标准化(StandardScaler)

数据归一化(MinMaxScaler)

数据离散化(KBinsDiscretizer)

缺失值处理(SimpleImputer)

特征选择

基于单变量特征选择(SelectKBest)

递归特征消除(RFE)

特征重要性评估(通过模型的feature_importances_属性)

模型选择与评估

交叉验证(cross_val_score)

训练集和测试集划分(train_test_split)

网格搜索(GridSearchCV)

模型评估指标

监督学习

线性回归(LinearRegression)

逻辑回归(LogisticRegression)

支持向量机(SVM)

决策树(DecisionTreeClassifier/DecisionTreeRegressor)

随机森林(RandomForestClassifier/RandomForestRegressor)

K近邻(KNeighborsClassifier/KNeighborsRegressor)

无监督学习

K均值聚类(KMeans)

层次聚类(AgglomerativeClustering)

主成分分析(PCA)

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)

 神经网络

多层感知机(MLPClassifier/MLPRegressor)

神经网络的优化器(如SGD、Adam等)


Scikit-learn是一个开源的Python机器学习库,它提供了简单有效的数据挖掘和数据分析工具。以下是Scikit-learn库中各种方法功能的详细介绍,按类别进行分类:

数据预处理

  • 数据标准化(StandardScaler)

将数据按列(特征)进行标准化,即减去均值并除以标准差,使数据符合标准正态分布(均值为0,标准差为1)。

## 数据预处理
# 1. 数据标准化 StandardScaler
from sklearn.preprocessing import StandardScaler
import numpy as npdata = np.array([[1, 2], [3, 4], [5, 6]])# 创建标准化对象
scaler = StandardScaler()# 拟合并转换数据
scaled_data = scaler.fit_transform(data)
print(scaled_data)
# [[-1.22474487 -1.22474487]
#  [ 0.          0.        ]
#  [ 1.22474487  1.22474487]]
  • 数据归一化(MinMaxScaler)

将数据按列(特征)归一化到指定的范围(通常是0到1)。这对于一些对数据范围敏感的算法(如神经网络)很有用

# 2. 数据归一化 MinMaxScaler
from sklearn.preprocessing import MinMaxScaler
import numpy as np# 示例数据
data = np.array([[1, 2], [3, 4], [5, 6]])# 创建归一化对象
scaler = MinMaxScaler()# 拟合并转换数据
normalized_data = scaler.fit_transform(data)print(normalized_data)
# [[0.  0. ]
#  [0.5 0.5]
#  [1.  1. ]]
  • 数据离散化(KBinsDiscretizer)

将连续数据离散化为指定数量的区间。这在一些场景下可以简化模型,例如在决策树算法中,离散化后的数据可以减少模型的复杂度,同时也可以处理一些对连续数据不敏感的算法

# 3. 数据离散化 KBinsDiscretizer
from sklearn.preprocessing import KBinsDiscretizer
import numpy as np# 示例数据
data = np.array([[1, 2], [3, 4], [5, 6]])# 创建离散化对象
discretizer = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')# 拟合并转换数据
discretized_data = discretizer.fit_transform(data)print(discretized_data)
# [[0. 0.]
#  [1. 1.]
#  [2. 2.]]
  • 缺失值处理(SimpleImputer)

用于处理数据中的缺失值。可以采用不同的策略填充缺失值,如用均值、中位数、众数等填充

# 4. 缺失值处理 SimpleImputerfrom sklearn.impute import SimpleImputer
import numpy as np# 示例数据,np.nan表示缺失值
data = np.array([[1, 2], [np.nan, 4], [5, 6]])# 创建缺失值填充对象
imputer = SimpleImputer(strategy='mean')# 拟合并填充缺失值
imputed_data = imputer.fit_transform(data)print(imputed_data)
# [[1. 2.]
#  [3. 4.]
#  [5. 6.]]

特征选择

  • 基于单变量特征选择(SelectKBest)

选择与目标变量相关性最高的K个特征。它通过统计检验(如卡方检验、互信息等)来评估每个特征与目标变量之间的关系,然后选择得分最高的K个特征

## 特征选择
# 1. 基于单变量特征选择 SelectBest
from sklearn.feature_selection import SelectKBest, chi2
from sklearn.datasets import load_iris# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target
print(X.shape, y.shape)  # (150, 4) (150,)# 创建单变量特征选择对象
selector = SelectKBest(chi2, k=2)# 拟合并选择特征
X_new = selector.fit_transform(X, y)print(X_new.shape)  # (150, 2)
  • 递归特征消除(RFE)

通过递归的方式减少特征集的大小。它首先训练一个模型,然后去掉最不重要的特征,再训练模型,如此循环,直到达到指定的特征数量

# 2. 递归特征消除 RFE
from sklearn.feature_selection import RFE
from sklearn.svm import SVC
from sklearn.datasets import load_iris# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target# 创建RFE对象
estimator = SVC(kernel="linear")
selector = RFE(estimator, n_features_to_select=2, step=1)# 拟合并选择特征
X_new = selector.fit_transform(X, y)print(X_new.shape)  # (150, 2)
  • 特征重要性评估(通过模型的feature_importances_属性)

一些模型(如决策树、随机森林等)可以提供特征重要性的评估。通过查看这些重要性值,可以了解哪些特征对模型的预测更有贡献

# 3. 特征重要性评估
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target# 创建随机森林模型
model = RandomForestClassifier()# 训练模型
model.fit(X, y)# 获取特征重要性
feature_importances = model.feature_importances_print(feature_importances)  # [0.12710536 0.02994003 0.51082638 0.33212824]

模型选择与评估

  • 交叉验证(cross_val_score)

用于评估模型的性能。它将数据集分成若干个子集,然后在不同的子集上进行训练和测试,最后计算模型在所有子集上的平均性能

## 模型选择与评估
# 1. 交叉验证 cross_val_scorefrom sklearn.model_selection import cross_val_score
from sklearn.datasets import load_iris
from sklearn.svm import SVC# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target# 创建模型
model = SVC()# 进行交叉验证
scores = cross_val_score(model, X, y, cv=5)print(scores)  # [0.96666667 0.96666667 0.96666667 0.93333333 1.        ]
  • 训练集和测试集划分(train_test_split)

将数据集随机划分为训练集和测试集。这是评估模型性能的基本方法,通过在训练集上训练模型,在测试集上测试模型,可以了解模型对未知数据的泛化能力

# 2. 训练集和测试集划分 train_test_splitfrom sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建模型
model = LogisticRegression()# 训练模型
model.fit(X_train, y_train)# 测试模型
accuracy = model.score(X_test, y_test)print(accuracy)  # 1.0
  • 网格搜索(GridSearchCV)

用于搜索模型的最优参数。它通过穷举搜索的方式,在指定的参数网格中寻找最佳的参数组合

# 3. 网格搜索 GridSearchCVfrom sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import load_iris# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target# 创建模型
model = SVC()# 定义参数网格
param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf']}# 创建网格搜索对象
grid_search = GridSearchCV(model, param_grid, cv=5)# 进行网格搜索
grid_search.fit(X, y)# 获取最佳参数和最佳分数
best_params = grid_search.best_params_
best_score = grid_search.best_score_print(best_params)  # {'C': 1, 'kernel': 'linear'}
print(best_score)  # 0.9800000000000001
  • 模型评估指标

提供了多种模型评估指标,如准确率(accuracy_score)、精确率(precision_score)、召回率(recall_score)、F1分数(f1_score)等。这些指标可以根据不同的问题类型(分类、回归等)来评估模型的性能

# 4. 模型评估指标from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建模型
model = LogisticRegression()# 训练模型
model.fit(X_train, y_train)# 预测测试集
y_pred = model.predict(X_test)# 计算评估指标
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='weighted')
recall = recall_score(y_test, y_pred, average='weighted')
f1 = f1_score(y_test, y_pred, average='weighted')print(f'Accuracy: {accuracy}')  # Accuracy: 1.0
print(f'Precision: {precision}')  # Precision: 1.0
print(f'Recall: {recall}')  # Recall: 1.0
print(f'F1 Score: {f1}')  # F1 Score: 1.0

监督学习

  • 线性回归(LinearRegression)

用于解决回归问题,即预测连续值的目标变量。它假设目标变量与特征之间存在线性关系,通过最小二乘法等方法来拟合模型

## 监督学习
# 1. 线性回归 LinearRegressionfrom sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression# 生成回归数据
X, y = make_regression(n_samples=100, n_features=1, noise=0.1)# 创建线性回归模型
model = LinearRegression()# 训练模型
model.fit(X, y)# 预测
y_pred = model.predict(X)# 输出模型权重和偏置项(截距)
print(model.coef_, model.intercept_)  # [69.83035754] -0.02287143685714188
  • 逻辑回归(LogisticRegression)

用于解决二分类问题。它通过逻辑函数(Sigmoid函数)将线性回归的输出映射到0和1之间,从而实现分类

# 2. 逻辑回归 LogisticRegressionfrom sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建逻辑回归模型
model = LogisticRegression()# 训练模型
model.fit(X_train, y_train)# 测试模型
accuracy = model.score(X_test, y_test)print(accuracy)  # 1.0
  • 支持向量机(SVM)

既可以用于分类(SVC)也可以用于回归(SVR)。在分类任务中,它通过寻找最优的超平面来分割不同类别的数据;在回归任务中,它通过拟合一条曲线来预测目标变量

# 3. 支持向量机 SVM
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建SVM模型
model = SVC(kernel='linear')# 训练模型
model.fit(X_train, y_train)# 测试模型
accuracy = model.score(X_test, y_test)print(accuracy)  # 1.0
  • 决策树(DecisionTreeClassifier/DecisionTreeRegressor)

决策树是一种基于树结构的模型,既可以用于分类也可以用于回归。它通过一系列的条件判断来对数据进行分类或预测

# 4. 决策树 DecisionTreeClassifier/DecisionTreeRegressor
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建决策树模型
model = DecisionTreeClassifier()# 训练模型
model.fit(X_train, y_train)# 测试模型
accuracy = model.score(X_test, y_test)print(accuracy)  # 1.0
  • 随机森林(RandomForestClassifier/RandomForestRegressor)

是基于决策树的集成学习方法。它通过构建多个决策树,并将它们的预测结果进行综合来提高模型的性能

# 5. 随机森林 RandomForestClassifier/RandomForestRegressor
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建随机森林模型
model = RandomForestClassifier(n_estimators=100)# 训练模型
model.fit(X_train, y_train)# 测试模型
accuracy = model.score(X_test, y_test)print(accuracy)  # 1.0
  • K近邻(KNeighborsClassifier/KNeighborsRegressor)

基于最近邻的原理进行分类或回归。在分类任务中,根据K个最近邻的类别来确定目标数据的类别;在回归任务中,根据K个最近邻的目标值来预测目标数据的值

# 6. K近邻 KNeighborsClassifier/KNeighborsRegressor
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建K近邻模型
model = KNeighborsClassifier(n_neighbors=3)# 训练模型
model.fit(X_train, y_train)# 测试模型
accuracy = model.score(X_test, y_test)print(accuracy)  # 1.0

无监督学习

  • K均值聚类(KMeans)

将数据划分为K个簇,使簇内的数据点尽可能相似,簇间的数据点尽可能不同

## 无监督学习
# 1. K均值聚类 KMeansfrom sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt# 生成聚类数据
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)# 创建K均值聚类模型
model = KMeans(n_clusters=4)# 训练模型
model.fit(X)# 预测聚类标签
y_pred = model.predict(X)# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()

  • 层次聚类(AgglomerativeClustering)

通过构建层次结构的方式进行聚类。它从每个数据点作为一个单独的簇开始,然后逐步合并最相似的簇,直到达到指定的簇数量

# 2. 层次聚类 AgglomerativeClusteringfrom sklearn.cluster import AgglomerativeClustering
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt# 生成聚类数据
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)# 创建层次聚类模型
model = AgglomerativeClustering(n_clusters=4)# 预测聚类标签
y_pred = model.fit_predict(X)# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()

 

  • 主成分分析(PCA)

用于降维。它通过将数据投影到主成分方向上,减少数据的维度,同时尽量保留数据的方差信息

# 3. 主成分分析 PCAfrom sklearn.decomposition import PCA
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target# 创建PCA对象
pca = PCA(n_components=2)# 拟合并转换数据
X_new = pca.fit_transform(X)# 可视化结果
plt.scatter(X_new[:, 0], X_new[:, 1], c=y)
plt.show()

 

  • DBSCAN(Density-Based Spatial Clustering of Applications with Noise)

一种基于密度的聚类算法,能够发现任意形状的簇,并且可以识别噪声点

# 4. DBSCANfrom sklearn.cluster import DBSCAN
from sklearn.datasets import make_moons
import matplotlib.pyplot as plt# 生成聚类数据
X, y = make_moons(n_samples=300, noise=0.05, random_state=0)# 创建DBSCAN模型
model = DBSCAN(eps=0.2, min_samples=5)# 预测聚类标签
y_pred = model.fit_predict(X)# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()

 神经网络

  • 多层感知机(MLPClassifier/MLPRegressor)

是一种简单的神经网络模型,既可以用于分类也可以用于回归。它包含一个或多个隐藏层,通过激活函数和反向传播算法进行训练

## 神经网络
# 1. 多层感知机 MLPClassifier/MLPRegressorfrom sklearn.neural_network import MLPClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建多层感知机模型
model = MLPClassifier(hidden_layer_sizes=(10,), max_iter=1000)# 训练模型
model.fit(X_train, y_train)# 测试模型
accuracy = model.score(X_test, y_test)print(accuracy)  # 1.0
  • 神经网络的优化器(如SGD、Adam等)

用于优化神经网络的训练过程。不同的优化器有不同的更新策略,可以加快模型的收敛速度,提高模型的性能

# 2. 神经网络的优化器 SGD、Adam等from sklearn.neural_network import MLPClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建多层感知机模型,使用Adam优化器
model = MLPClassifier(hidden_layer_sizes=(10,), max_iter=1000, solver='adam')# 训练模型
model.fit(X_train, y_train)# 测试模型
accuracy = model.score(X_test, y_test)print(accuracy)  # 1.0

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

相关文章:

  • Deep semi-supervised learning for medical image segmentation: A review
  • 《解码人工智能:从理解到应用的变革之旅》
  • 当AR遇上深度学习:实时超声肾脏分割与测量技术全解析
  • Linux操作系统之文件(一):重识IO
  • FastAPI 安装使用教程
  • 通用编码器芯片 L1527产品介绍,低重码率,高安全性433解码芯片
  • 激活向量是什么
  • LCS4110R安全芯片防抄板原理
  • HTML初学者第二天
  • Spring-解决IDEA中无法创建JDK17一下的SpringBoot项目
  • 【计算机网络】补充
  • 04.Vue自定义组件制作详细指南
  • 【数据结构】排序算法:冒泡与快速
  • docker-compose编排saleor
  • 基于Apache POI实现百度POI分类快速导入PostgreSQL数据库实战
  • 1-RuoYi框架配置与启动
  • BlenderFBXExporter 导出fbx被修改问题
  • R Studio开发中记录
  • [IMX][UBoot] 08.启动流程 (4) - 平台后期初始化阶段 - board_init_r
  • 深入解析外观模式(Facade Pattern):简化复杂系统的优雅设计
  • 如何系统性评估运维自动化覆盖率:方法与关注重点
  • 拐点的可导性的图像区别
  • 回顾JAVA中的锁机制
  • 解决在Pom文件中写入依赖坐标后, 刷新Maven但是多次尝试都下载不下来
  • Maven工具学习使用(十三)——Maven Wrapper命令解析与使用
  • 告别 ifconfig:openEuler 网络配置的现代化之路
  • Linux 启动过程流程图--ARM版
  • 高速公路闲置土地资源化利用:广西浦北互通3MW分布式光伏监控实践
  • STEP 7-MicroWIN SMART软件安装及运行故障全方位解决
  • 【51单片机单595点阵8按键调节速度方向花样】2022-6-18