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

人工智能学习与实训笔记(十五):Scikit-learn库的基础与使用

人工智能专栏文章汇总:人工智能学习专栏文章汇总-CSDN博客

本篇目录

一、介绍

1. 1 Scikit-learn的发展历程及定义

1.2 理解算法包、算法库及算法框架之间的区别和联系

二、Scikit-learn官网结构

三、安装与设置

3.1 Python环境的安装与配置

3.2 Scikit-learn的安装

四、Scikit-learn的快速入门

4.1 数据集的导入和处理

4.2 数据集切分

4.3 数值数据的标准化

4.4 数值数据的归一化

4.4 核心对象类型:评估器(estimator)

4.5 高级特性-管道(Pipeline)

4.6 模型保存

五、实操:使用Scikit-learn实现线性回归建模

5.1 建模流程

5.2 什么是超参数

5.3 如何在官网中找到模型操作文档

六、总结


一、介绍

1. 1 Scikit-learn的发展历程及定义

Scikit-learn的发展始于2007年,由David Cournapeau在Google Summer of Code项目中启动。项目后续得到了许多开发者的贡献,包括INRIA(法国国家信息与自动化研究所),Waikato大学和其他机构。

项目之所以取名为Scikit-Learn,也是因为该算法库是基于SciPy来进行的构建,而Scikit则是SciPy Kit(SciPy衍生的工具套件)的简称

Scikit-learn是目前机器学习领域最完整、同时也是最具影响力的算法库。它基于Numpy, Scipy和matplotlib,包含了大量的机器学习算法实现,包括分类、回归、聚类和降维等,还包含了诸多模型评估及选择的方法。Scikit-learn的API设计的非常清晰,易于使用和理解,适合于新手入门,同时也满足了专业人士在实际问题解决中的需求。

1.2 理解算法包、算法库及算法框架之间的区别和联系

算法包:包含预先编写的,针对特定问题或一系列相关问题的算法实现。算法包可以用于执行特定的任务或操作,例如数值分析、机器学习、图像处理等。使用者可以直接调用这些算法,而不需要自己从零开始编写。如表格数据分析包Pandas

算法库:算法库和算法包非常相似,通常可以互换使用。它也是包含了预先编写的,用于解决特定问题的一系列算法的集合,主要指代封装程度更高、对机器学习这一大类算法功能实现更加完整、甚至是定义了一类数据结构的代码模块,如科学计算库NumPy

算法框架:算法框架则是一个更大的概念,它提供了一个用于开发、构建和实现算法的系统,通常包含了一套标准的编程接口(API)、工具、库和规范。它的主要目的是简化和标准化开发过程,使得开发者可以更专注于实现特定的功能或算法,而不需要处理大量的基础设施问题。如机器学习算法库Scikit-Learn

通俗的理解一下:用一个餐厅的比喻来理解这三个概念:

  • 算法包(Algorithm Package):就像餐厅菜单上的某个具体的菜品。每个菜品都有特定的制作方法,各种食材以特定的方式搭配,制作出特定的菜。比如你想吃鱼香肉丝,你可以直接点这道菜,而不需要告诉厨师应该怎么做。
  • 算法库(Algorithm Library):就像整个餐厅的菜单。菜单包含了很多菜品,不论你想吃主食、汤还是甜点,你都可以在菜单上找到。你只需要从菜单中选择你想要的菜,而不需要知道具体的做法。
  • 算法框架(Algorithm Framework):就像整个餐厅的运营模式。这不仅仅包括菜单,还有餐厅的装修风格,服务员的服务态度,烹饪食物的方式,以及提供食物的时间等等。它提供了一种方便的方式,使得你可以在一个地方享受到完整的用餐体验,而不仅仅是食物本身。

所以在编程中,直接使用算法包来解决特定的问题,使用算法库可以解决一系列的问题,而使用算法框架则可以帮助我们更好地组织和构建代码,更有效地解决问题。

二、Scikit-learn官网结构

对于大多数流行的开源项目,官网都是学习的绝佳资源。而对于Scikit-Learn来说尤其是如此。哪怕是顶级开源项目盛行的当下,Scikit-Learn官网在相关内容介绍的详细和完整程度上,都是业内首屈一指的。无论是Scikit-Learn的安装、更新,还是具体算法的使用方法,甚至包括算法核心原理的论文出处以及算法使用的案例,在Scikit-Learn官网上都有详细的介绍。其官网地址:

Scikit-Learn官网,主要功能介绍如下:

image-20230703105257138

  1. 导航栏

image-20230703103736820

  1. 六大功能模块

Scikit-learn将所有的评估器和函数功能分为六大类,分别是分类模型(Classification)、回归模型(Regression)、聚类模型(Clustering)、降维方法(Dimensionality reduction)、模型选择(Model selection)和数据预处理六大类。

六个功能模块的划分其实是存在很多交叉的,对于很多模型来说,既能处理分类问题、同时也能处理回归问题,而很多聚类算法同时也可以作为降维方法实用。例如线性回归对用评估器可从Regression进入进行查找,而对用模型评估指标,由于评估指标最终是指导进行模型选择的,因此模型评估指标计算的实用函数的查找应该从Model selection入口进入。

image-20230703104323919

  1. User Guide:sklearn所有内容的合集文档

在最上方的User Guide一栏进入sklearn所有内容的合集页面,其中包含了sklearn的所有内容按照使用顺序进行的排序。如果点击左上方的Other versions,则可以下载sklearn所有版本的User Guide的PDF版本。

image-20230703105941226

  1. API:按照二级模块首字母排序的接口查询文档

如果想根据评估器或实用函数的名字去查找相关API说明文档,则可以点击最上方的API一栏进入到根据二极模块首字母排序的API查询文档中。其中二级模块指的是类似包含线性回归的linear_model模块或者包含MSE的metrics模块。

image-20230703110042249

三、安装与设置

3.1 Python环境的安装与配置

如果您还不知道怎么安装Python基础环境,建议您阅读此文,详解了Anaconda的下载、安装与启动,Jupyter的基本操作及其强大的Notebook编辑环境及轻松升级Python版本、维护和管理Python的第三方库,满满干货!

Python包的安装和部署的几种方式 | 满满干货

3.2 Scikit-learn的安装

在完成Python环境的安装和配置后,可以进行Scikit-learn的安装,在官网上对应的位置如下:

image-20230703110330682

Scikit-learn需要Python (>= 3.6) 和pip。

安装Scikit-learn的依赖包,包括NumPy和SciPy。如果已经安装了这些包,可以跳过此步。如果还没有,可以使用以下命令来安装:

pip install numpy scipy

接下来,可以安装Scikit-learn了。使用以下命令来安装:

pip install -U scikit-learn

这个命令将会安装或者升级Scikit-learn到最新版本。

如果使用的是Anaconda,那么安装Scikit-learn更加简单,直接使用以下命令:

conda install scikit-learn

确认Scikit-learn是否已经成功安装,可以尝试在Python环境中导入它:

import sklearn
sklearn.__version__

如果没有出现任何错误信息,那么就说明Scikit-learn已经成功安装了。

以上是基本的安装步骤,不同的操作系统和Python环境可能会有一些差异。需要根据自己的实际情况进行调整。如果在安装过程中遇到任何问题,可以查阅Scikit-learn的官方文档或者在网上搜索解决方案。

版本更新:

pip install --upgrade sklearn

四、Scikit-learn的快速入门

4.1 数据集的导入和处理

Scikit-learn提供了非常多的内置数据集,并且还提供了一些创建数据集的方法,这些数据集常用于演示各种机器学习算法的使用方法。这些数据集分为两种类型:小规模的玩具数据集(Toy Datasets)和大规模的真实世界数据集(Real-World Datasets)。

以下是几个常见的玩具数据集:

  1. Iris(鸢尾花):一个分类问题的数据集,包含了三种鸢尾花的四个特征,目标是根据这些特征预测鸢尾花的种类。
  2. Digits(手写数字):一个多分类问题的数据集,包含了手写数字的8x8像素图像,目标是识别这些图像对应的数字。
  3. Boston House Prices(波士顿房价):这是一个回归问题的数据集,包含了波士顿各个区域的房价和其他13个特征,目标是预测房价。
  4. Breast Cancer(乳腺癌):这是一个二分类问题的数据集,包含了乳腺肿瘤的30个特征,目标是预测肿瘤是良性还是恶性。

sklearn中的数据集相关功能都在datasets模块下,可以通过API文档中的datasets模块所包含的内容对所有的数据集和创建数据集的方法进行概览。

image-20230703140835097

image-20230703141003085

image-20230703141104936

要在Scikit-learn中加载这些数据集,可以使用sklearn.datasets模块中的相关函数,例如:

from sklearn.datasets import load_irisiris = load_iris()

这个函数会返回一个Bunch对象,包含了数据、目标和其他信息。例如,iris.data是一个包含了特征的二维数组,iris.target是一个包含了目标的一维数组。

名称描述
data数据集特征矩阵
target数据集标签数组
feature_names各列名称
target_names各类别名称
frame当生成对象是DataFrame时,返回完整的DataFrame

对应的可以使用如下代码查看:

# 数据集包含四个特征
print("Features: ", iris.feature_names)
# 数据集有三种分类标签
print("Labels: ", iris.target_names)# 将数据转换为DataFrame以便于查看
iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)# 添加分类标签到DataFrame
iris_df['label'] = iris.target# 显示数据的前五行
print(iris_df.head())

image-20230703141719555

Scikit-learn也提供了一些真实世界的数据集,但由于规模较大,通常需要下载。这些数据集可以用于更复杂的任务和算法的测试。例如,fetch_20newsgroups函数可以下载20 Newsgroups文本数据集,用于文本分类等任务。

4.2 数据集切分

在Scikit-learn中,通常将原始数据集切分为训练集和测试集,这样做可以评估模型在未见过的数据上的性能。数据集切分的目的是为了更好的进行模型性能评估,而更好的进行模型性能评估则是为了更好的进行模型挑选,Scikit-learn提供了train_test_split函数来帮助完成这一任务,train_test_split在model_selection模块下。

image-20230703142713957

image-20230703142909817

可以这样调用并使用它:

from sklearn.model_selection import train_test_split# 假设X是特征,y是目标
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

train_test_split函数的主要参数有:

  • X, y:需要被切分的数据。
  • test_size:代表测试集的比例。在上面的例子中,我们将20%的数据用作测试集。
  • random_state:随机种子,可以确保每次运行代码时数据的切分方式相同。

在代码上,可以使用?的方式来查看函数的详细信息:

# 查阅该函数的帮助文档
train_test_split?

image-20230703143118481

这里面有两个参数需要关注一下

  • 随机数种子的设置,random_state取值不同,切分结果就会各有不同
  • stratify参数是控制训练集和测试集不同类别样本所占比例的参数,若希望切分后的训练集和测试集中0、1两类的比例和原始数据相同(1:1),则可另stratify=y。

4.3 数值数据的标准化

如果你还不理解什么是标准化和归一化,一定要看这篇,整篇都是干货:

梯度下降优化(一):数据归一化的理论与实践

当时是手动实现的,而Scikit-learn中,可以直接调用函数来使用,非常方便简单。

Scikit-learn中的预处理模块sklearn.preprocessing提供了许多实用的特征缩放功能,包括数据归一化(Normalization)和标准化(Standardization)。这两种技术都用于改变特征的尺度,以便在训练机器学习模型时保证它们在相同的范围内。

此处需要注意一点:从功能上划分,Scikit-learn中的归一化其实是分为标准化(Standardization)和归一化(Normalization)两类。Z-Score标准化和0-1标准化,都属于Standardization的范畴,Normalization则特指针对单个样本(一行数据)利用其范数进行放缩的过程。

  1. 数据归一化:归一化通常意味着将数据缩放到[0, 1]的范围内,或者使得所有数据的范围都在[-1, 1]之间。可以使用Scikit-learn的MinMaxScaler来实现。

```python from sklearn.preprocessing import MinMaxScaler

X = np.arange(30).reshape(5, 6)

X_train, X_test = train_test_split(X)

scaler = MinMaxScaler() X_train_normalized = scaler.fit_transform(X_train) X_test_normalized = scaler.transform(X_test)

X_test_normalized ```

这段代码首先创建了一个MinMaxScaler对象,然后使用fit_transform方法对训练数据进行拟合和转换,最后使用transform方法对测试数据进行转换。

  1. 数据标准化:标准化则是将数据缩放,使得它们的均值为0,标准差为1。这可以通过Scikit-learn的StandardScaler来实现。
X = np.arange(30).reshape(5, 6)X_train, X_test = train_test_split(X)scaler = StandardScaler()X_train_standardized = scaler.fit_transform(X_train)# 利用训练集的均值和方差对测试集进行标准化处理
X_test_standardized = scaler.transform(X_test)X_test_standardized

4.3.1 为什么对训练集要使用fit_transform,而对测试集只使用transform?

您可能也注意到了,我们对训练集使用了fit_transform(),而对测试集直接调用了transform()方法,这样Scikit-learn会使用之前在训练集上计算得到的均值和标准差来对测试集进行标准化。

这样做是为了使训练集和测试集在一个统一的标准维度上进行计算和测试,这样得到的预测值才是具有可比性的。因此,任何形式的预处理(包括特征缩放)都应当只以训练集的数据为基准来完成。

4.4 数值数据的归一化

在Scikit-learn中,preprocessing.normalize是另一种类型的"归一化"。

preprocessing.normalize的功能是按照向量空间模型(Vector Space Model)对特征向量进行转换,使得每个特征向量的欧几里得长度(L2范数)等于1,或者每个元素的绝对值之和(L1范数)等于1。换句话说:和标准化不同,Scikit-learn中的归一化特指将单个样本(一行数据)放缩为单位范数(1范数或者2范数为单位范数)的过程,该操作常见于核方法或者衡量样本之间相似性的过程中。

假设向量$x = [x_1, x_2, ..., x_n]^T$,则向量x的1-范数的基本计算公式为: (1)||�||1=|�1|+|�2|+...+|��| 在数学中,范数(Norm)是一个函数,其将向量映射为非负值。直观上,范数可以理解为向量的“长度”或“大小”。

即各分量的绝对值之和。而向量x的2-范数计算公式为: (2)||�||2=(|�1|2+|�2|2+...+|��|2) 即各分量的平方和再开平方。

而Scikit-learn中的Normalization过程,实际上就是将每一行数据视作一个向量,然后用每一行数据去除以该行数据的1-范数或者2-范数。具体除以哪个范数,以preprocessing.normalize函数中输入的norm参数为准。

from sklearn.preprocessing import normalize
import numpy as np# 创建一个numpy数组
X = np.array([[1., -1., 2.],[2., 0., 0.],[0., 1., -1.]])# 对数据进行归一化处理,使用默认的L2范数
X_normalized = normalize(X, norm='l2')

在上面的代码中,每一行的特征向量被归一化为单位范数(长度为1)。这就意味着每一个样本的所有特征值的平方和为1。也可以通过设置norm参数为'l1',来进行L1范数归一化,使得每个样本的所有特征值的绝对值和为1。

4.4 核心对象类型:评估器(estimator)

许多功能强大的第三方库都定义了自己的核心对象类型,这些对象类型实际上都是源码中定义的特定类的实例。例如,NumPy的核心是数组(Array),Pandas的核心是DataFrame,PyTorch的核心则是张量(Tensor)。这些对象类型为数据分析和机器学习提供了强大的工具。

对于Scikit-learn来说,它的核心对象类型是评估器(Estimator)。可以将评估器看作是一种封装了各种机器学习模型的工具。在Scikit-learn中进行模型训练的过程,其核心就是围绕着这些评估器展开的。

总的来说,这些不同库的核心对象类型都为处理特定任务提供了便捷,使得可以更加专注于问题的解决,而不需要深入底层去处理复杂的细节。"

围绕评估器的使用也基本分为两步,其一是实例化该对象,其二则是围绕某数据进行模型训练。

4.5 高级特性-管道(Pipeline)

在Scikit-learn中,Pipeline是一种方便地将多个步骤组织在一起的工具,常常用于包含多个步骤的数据预处理和建模过程。Pipeline在确保步骤顺序执行,代码整洁,并在进行交叉验证时防止数据泄露方面有很大的优势。

Pipeline工作流程类似于生产线,每个步骤都是独立的,但所有的步骤都依次串联起来,上一步的输出作为下一步的输入。一个典型的Pipeline可能包括数据的缩放(如归一化或标准化)、特征选择、降维以及最后的模型训练等步骤。

直接来看下代码:

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split# 加载糖尿病数据集
diabetes = load_diabetes()
X_train, X_test, y_train, y_test = train_test_split(diabetes.data, diabetes.target, random_state=0)# 创建一个Pipeline
pipe = Pipeline([('scaler', StandardScaler()),  # 第一步是标准化('regressor', LinearRegression())  # 第二步是线性回归
])# 使用Pipeline进行训练
pipe.fit(X_train, y_train)# 使用Pipeline进行预测
y_pred = pipe.predict(X_test)y_pred

在这个例子中,创建了一个Pipeline,它包含两个步骤:一个是StandardScaler,用于对数据进行标准化处理;另一个是LinearRegression,用于进行回归预测。然后在训练集上调用fit方法,Pipeline会依次对每个步骤进行训练(也就是说,它首先在数据上进行标准化,然后使用标准化的数据训练回归模型)。当在测试集上调用predict方法时,Pipeline会依次对每个步骤进行预测(即先进行标准化,然后使用训练好的回归模型进行预测)。

4.6 模型保存

模型保存(model persistence)是一种将训练好的机器学习模型保存到磁盘,然后在以后的时间点(可能是在不同的环境中)加载和使用的技术。这是非常有用的,因为通常训练一个好的模型可能需要大量的时间和计算资源。一旦模型被训练,我们可能希望在未来重新使用它,而不是每次需要时都重新训练。

在Scikit-learn中,可以使用Python的内置库pickle,或者joblib库(一种特别针对大数据的pickle)来实现模型保存和加载。

直接上代码:演示如何使用joblib保存和加载模型:

pythonCopy codefrom sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from joblib import dump, load# 加载iris数据集并训练一个随机森林分类器
iris = load_iris()
clf = RandomForestClassifier()
clf.fit(iris.data, iris.target)# 将模型保存到磁盘
dump(clf, 'randomforest_model.joblib') # 在需要的时候加载模型
clf_loaded = load('randomforest_model.joblib') # 使用加载的模型进行预测
y_pred = clf_loaded.predict(iris.data)

以上代码中,dump函数将模型保存到指定的文件中,而load函数则从文件中加载模型。注意,保存和加载模型的代码通常不会在同一脚本或同一会话中运行,这里只是为了演示。

如果模型包含了大量的numpy数组(例如,神经网络或随机森林等模型),使用joblib可能比使用pickle更高效。因此,Scikit-learn官方文档推荐使用joblib来保存和加载模型。

五、实操:使用Scikit-learn实现线性回归建模

5.1 建模流程

  • Step 1:准备数据,生成1000个基本规律满足$y=2x_1-x_2+1$分布回归类数据集
# 科学计算模块
import numpy as np
import pandas as pd# 绘图模块
import matplotlib as mpl
import matplotlib.pyplot as plt# 回归数据创建函数
def arrayGenReg(num_examples = 1000, w = [2, -1, 1], bias = True, delta = 0.01, deg = 1):"""回归类数据集创建函数。:param num_examples: 创建数据集的数据量:param w: 包括截距的(如果存在)特征系数向量:param bias:是否需要截距:param delta:扰动项取值:param deg:方程最高项次数:return: 生成的特征张和标签张量"""if bias == True:num_inputs = len(w)-1                                                           # 数据集特征个数features_true = np.random.randn(num_examples, num_inputs)                       # 原始特征w_true = np.array(w[:-1]).reshape(-1, 1)                                        # 自变量系数b_true = np.array(w[-1])                                                        # 截距labels_true = np.power(features_true, deg).dot(w_true) + b_true                 # 严格满足人造规律的标签features = np.concatenate((features_true, np.ones_like(labels_true)), axis=1)    # 加上全为1的一列之后的特征else: num_inputs = len(w)features = np.random.randn(num_examples, num_inputs) w_true = np.array(w).reshape(-1, 1)         labels_true = np.power(features, deg).dot(w_true)labels = labels_true + np.random.normal(size = labels_true.shape) * deltareturn features, labels

这段代码的目的是创建一个回归类数据集。它定义了一个函数arrayGenReg,用于生成具有特定规律的回归类数据集。该函数根据给定的参数生成特征和标签数据,并可以选择是否添加截距项。特征数据根据正态分布随机生成,而标签数据根据设定的规律进行计算,并添加了服从正态分布的扰动项。这个函数的目的是方便生成用于回归问题的人工数据集。

  • Step 2 : 根据函数生成特征和标签数据。
# 设置随机数种子
np.random.seed(24)   # 扰动项取值为0.01
features, labels = arrayGenReg(delta=0.01)

image-20230703114334556

在这一步中,通过使用np.random.seed(24)设置了随机数种子为24。这样做的目的是确保接下来的随机生成过程可重复,即每次运行代码都会得到相同的随机数序列。然后,调用arrayGenReg函数生成回归类数据集的特征和标签。在这个例子中,将扰动项的取值设置为0.01,即delta=0.01

  • Step3 : 绘制两个子图,观察数据集在不同特征维度上的分布情况
# 可视化数据分布
plt.subplot(121)
plt.plot(features[:, 0], labels, 'o')
plt.subplot(122)
plt.plot(features[:, 1], labels, 'o')

分别绘制特征矩阵features的第一列(features[:, 0])、第二列(features[:, 1])与标签列labels之间的关系。

image-20230703114707573

  • Step 4:调用Scikit-learn中的线性回归评估器

首先,从Scikit-learn库中导入线性回归评估器,使用LinearRegression评估器进行线性回归建模。

from sklearn.linear_model import LinearRegression

然后,创建一个线性回归模型对象,被赋值给名为model的变量。

model = LinearRegression()

接下来,从之前生成的数据集中提取特征矩阵和标签,特征矩阵选取了前两个特征(features[:, :2]),并将其赋值给X变量。将标签数组赋值给y变量。

codeX = features[:, :2]  # 特征矩阵,选择前两个特征
y = labels  # 标签数组

最后,通过调用评估器中的fit()方法对模型进行训练:

model.fit(X, y)

通过这些步骤,线性回归模型将被训练并学习数据集中的模式和关联。

在机器学习中,评估器(Estimator)是用于学习数据模式和进行预测的对象。线性回归评估器(LinearRegression)是一种用于拟合线性模型的评估器。

实例化评估器是为了创建一个可供使用的评估器对象。通过实例化,可以设置评估器的参数和属性,以便进行后续的训练和预测操作。在这段代码中,通过使用LinearRegression()创建了一个线性回归评估器的实例,并将其赋值给model变量。

fit()方法是评估器的一个重要方法,用于对模型进行训练。在训练过程中,评估器根据提供的特征矩阵和标签数据,通过最小化损失函数来调整模型的参数,使其能够更好地拟合数据。通过训练过程,模型能够学习特征与标签之间的关系,并建立一个预测模型。

综上所述,通过实例化评估器、提供特征矩阵和标签数据,以及调用fit()方法来进行模型训练,才能够使用评估器拟合数据,并得到一个能够预测未知样本的线性回归模型。

  • Step 5: 查看模型训练参数
print("自变量参数:", model.coef_)
print("模型截距:", model.intercept_)

返回参数如下:

image-20230703120003507

  • Step 6: 结果解读

自变量参数:模型学习到的自变量参数为 [[1.99961892, -0.99985281]],接近于基本规律中的 [2, -1]。这表示模型能够很好地学习到数据生成的规律,并对特征之间的关系进行准确建模。

模型截距:模型学习到的截距为 [0.99970541],接近于基本规律中的 1。这意味着即使没有特征输入时,模型预测的输出值仍接近于1。

因此,根据模型的自变量参数和截距结果,可以得出结论:线性回归模型成功地学习到了基本规律中的特征之间的关系,并能够对未知样本进行准确的预测。

  • Step 7: 使用MSE做模型评估

可以使用Scikit-learn库中的均方误差(Mean Squared Error,MSE)计算函数,计算了预测值和真实标签之间的均方误差。

# 在metrics模块下导入MSE计算函数
from sklearn.metrics import mean_squared_error# 输入数据,进行计算
mean_squared_error(model.predict(X), y)

至此就完成了调用Scikit-learn的线性回归模型进行建模的流程

5.2 什么是超参数

重要:你必须要知道的概念:超参数

超参数,指的是无法通过数学过程进行最优值求解、但却能够很大程度上影响模型形式和建模结果的因素,例如线性回归中,方程中自变量系数和截距项的取值是通过最小二乘法或者梯度下降算法求出的最优解,而是否带入带入截距项、是否对数据进行归一化等,这些因素同样会影响模型形态和建模结果,但却是“人工判断”然后做出决定的选项,而这些就是所谓的超参数。
而Scikit-learn中,对每个评估器进行超参数设置的时机就在评估器类实例化的过程中。可以查看LinearRegression评估器的相关说明,其中Parameters部分就是当前模型超参数的相关说明:

image-20230703121933604

在上述Step 4过程中,直接使用的是:

model = LinearRegression()

这是因为使用的都是默认的参数,这些超参数可以在实例化过程中进行设置和修改,例如可以创建一个不包含截距项的线性方程模型:

model1 = LinearRegression(fit_intercept=False)
model1.get_params()

image-20230703134439570

对于一个已经实例化好的评估器,可以通过get_params来获取其建模所用的参数

在实例化模型的过程中必须谨慎的选择模型超参数,以达到最终模型训练的预期。不同的模型,有不同的超参数,这也是在后面学习建模过程中非常重要的一点。

5.3 如何在官网中找到模型操作文档

在官网中找到相关评估器(模型)说明,对于理解模型的原理及使用方法等是非常重要的。以LinearRegression评估器为例:

实现线性回归参数计算的方法有很多种,可以通过最小二乘法进行一步到位的参数求解,同时也能够通过梯度下降进行迭代求解,如果要详细了解训练过程的参数求解方法,就需要回到官网中查阅评估器的相关说明。首先我们已经知道了。LinearRegression是一个回归类模型,所以肯定在sklearn官网说明Regression板块中。

image-20230703135642365

点进去就可以看到,在该模块的1.1.1.Ordinary Least Squares中,就是关于LinearRegression评估器的相关说明。对于任何一个评估器(算法模型),说明文档会先介绍算法的基础原理、算法公式(往往就是损失函数计算表达式)以及一个简单的例子,必要时还会补充算法提出的相关论文链接,带领用户快速入门。

image-20230703135901176

image-20230703140050243

还会对算法的某些特性进行探讨(往往都是在使用过程中需要注意的问题),例如对于普通最小二乘法,最大的问题还是在于特征矩阵出现严重多重共线性时,预测结果会出现较大的误差。然后,说明文档会例举一个该算法的完整使用过程,也就是穿插在说明文档中的example。再然后,说明文档会讨论几个在模型使用过程中经常会比较关注的点,对于线性回归,此处列举了两个常见问题,其一是非负最小二乘如何实现,以及最小二乘法的计算复杂度。

image-20230703140313506

Scikit-learn官网说明文档非常细致并且非常完整,当使用其他模型,按照相同的方式进行学习、检索,就能充分理解模型的原理和使用。

六、总结

本文详细解释了Scikit-learn的一些基础用法,包括它的定义、安装、核心对象类型(评估器)和关键特性(如数据预处理,数据集切分,数据标准化和归一化),并学习了如何实现线性回归模型,包括了解超参数的概念,以及如何保存和加载模型,希望通过本文,能帮助大家对Scikit-learn有一个更深入的认识。

最后,感谢您阅读这篇文章!如果您觉得有所收获,别忘了点赞、收藏并关注我,这是我持续创作的动力。您有任何问题或建议,都可以在评论区留言,我会尽力回答并接受您的反馈。如果您希望了解某个特定主题,也欢迎告诉我,我会乐于创作与之相关的文章。谢谢您的支持,期待与您共同成长!

期待与您在未来的学习中共同成长。

相关文章:

人工智能学习与实训笔记(十五):Scikit-learn库的基础与使用

人工智能专栏文章汇总:人工智能学习专栏文章汇总-CSDN博客 本篇目录 一、介绍 1. 1 Scikit-learn的发展历程及定义 1.2 理解算法包、算法库及算法框架之间的区别和联系 二、Scikit-learn官网结构 三、安装与设置 3.1 Python环境的安装与配置 3.2 Scikit-lea…...

插值与拟合算法介绍

在数据处理和科学计算领域,插值与拟合是两种极为重要的数据分析方法。它们被广泛应用于信号处理、图像处理、机器学习、金融分析等多个领域,对于理解和预测数据趋势具有至关重要的作用。本文将深入浅出地介绍这两种算法的基本原理,并结合C语言编程环境探讨如何在CSDN开发者社…...

下一代Windows系统曝光:基于GPT-4V,Agent跨应用调度,代号UFO

下一代Windows操作系统提前曝光了?? 微软首个为Windows而设的智能体(Agent) 亮相: 基于GPT-4V,一句话就可以在多个应用中无缝切换,完成复杂任务。整个过程无需人为干预,其执行成功…...

二.自定义头文件

一.Worker.h 1.1概述 - 类名&#xff1a;Worker - 继承关系&#xff1a;所有其他类&#xff08;Employee、Manager、Boss&#xff09;都继承自该抽象类 - 头文件保护&#xff1a;使用 pragma once 防止头文件重复包含 - 引入标准库&#xff1a;包含 <iostream> 和 <st…...

【AIGC】Stable Diffusion之模型微调工具

推荐一款好用的模型微调工具&#xff0c;cybertron furnace 是一个lora训练整合包&#xff0c;提供训练 lora 模型的工具集或环境。集成环境包括必要的依赖项和配置文件、预训练脚本&#xff0c;支持人物、二次元、画风、自定义lora的训练&#xff0c;以简化用户训练 lora 模型…...

探索未来科技前沿:深度学习的进展与应用

深度学习的进展 摘要&#xff1a;深度学习作为人工智能领域的重要分支&#xff0c;近年来取得了巨大的进展&#xff0c;并在各个领域展现出惊人的应用潜力。本文将介绍深度学习的发展历程、技术原理以及在图像识别、自然语言处理等领域的应用&#xff0c;展望深度学习在未来的…...

PTA | Wifi密码

下面是微博上流传的一张照片&#xff1a;“各位亲爱的同学们&#xff0c;鉴于大家有时需要使用 wifi&#xff0c;又怕耽误亲们的学习&#xff0c;现将 wifi 密码设置为下列数学题答案&#xff1a;A-1&#xff1b;B-2&#xff1b;C-3&#xff1b;D-4&#xff1b;请同学们自己作答…...

Linux中gdb使用说明书

首先我们要使用gdb&#xff0c;必须明白gdb使用范围&#xff1a; 要使用gdb调试&#xff0c;必须在源代码生成二进制程序的时候, 加上 -g 选项&#xff08;gcc/g) 其次&#xff0c;我们就要来学习gdb使用的一些命令了&#xff1a; list&#xff0f;l 行号&#xff1a;显…...

LInux——开发工具的使用

目录 Linux软件包管理器 yum rzsz Linux编辑器——vim vim的使用 vim的基本操作 命令模式的常见命令 底行模式的常见命令 vim是需要配置的 Linux编译器——gcc/g 预处理 编译 汇编 链接 函数库 Linux项目自动化构建工具 make/makefile make原理 项目清理 Linux调试器g…...

沁恒CH32V30X学习笔记03--64位systick

systick CH32F2x 系列产品Cortex-M3 内核自带了一个 24 位自减型计数器(SysTick timer)。支持 HCLK 或 HCLK/8 作为时基,具有较高优先级别(6)。一般可用于操作系统的时基。 CH32V3x 系列产品内核自带了一个 64 位加减计数器(SysTick),支持 HCLK 或者 HCLK/8 作为时基,…...

【JavaEE】IP协议

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…...

计算机网络-数据通信基础

目录 前言 一、数据通信基本概念 二、数据通信相关知识1 总结 前言 正在学习计算机网络体系&#xff0c;把每日所学的知识梳理出来&#xff0c;既能够当作读书笔记&#xff0c;又能分享出来和大家一同学习讨论。 一、数据通信基本概念 基本概念&#xff1a;信源、信道、信宿&…...

【lesson53】线程控制

文章目录 线程控制 线程控制 线程创建 代码&#xff1a; 运行代码&#xff1a; 强调一点&#xff0c;线程和进程不一样&#xff0c;进程有父进程的概念&#xff0c;但在线程组里面&#xff0c;所有的线程都是对等关系。 错误检查: 传统的一些函数是&#xff0c;成功返回0&…...

TypeScript(一):TypeScript基本理解

TypeScript基本理解 为什么使用TS JavaScript发展至今&#xff0c;没有进行数据类型的验证而我们知道&#xff0c;在编程阶段&#xff0c;错误发现的越早越好而TS就解决了JS的这个问题 认识TypeScript TypeScript是拥有类型的JavaScript超级&#xff0c;它可以编译成普通、…...

C语言—指针

碎碎念:做指针题的时候我仿佛回到了原点&#xff0c;总觉得目的是为了把框架搭建起来&#xff0c;我胡说的哈31 1.利用指针变量将一个数组中的数据反向输出。 /*1.利用指针变量将一个数组中的数据反向输出。*/#include <stdio.h> #include <time.h> #include <…...

c++作业

Shell中的函数&#xff08;先调用后使用的原则&#xff09;&#xff08;没有申明&#xff09; &#xff08;Function&#xff09; 函数名&#xff08;有没有参数根据调用格式&#xff09;&#xff08;不能写任何内容&#xff09; { 函数体 Return 返回值 } 函数名 ----》…...

什么是tomcat?tomcat是干什么用的?

前言 Tomcat是一个开源的、轻量级的应用服务器&#xff0c;是Apache软件基金会的一个项目。它实现了Java Servlet、JavaServer Pages&#xff08;JSP&#xff09;和Java Expression Language&#xff08;EL&#xff09;等Java技术&#xff0c;用于支持在Java平台上运行的动态W…...

中科院一区论文复现,改进蜣螂算法,Fuch映射+反向学习+自适应步长+随机差分变异,MATLAB代码...

本期文章复现一篇发表于2024年来自中科院一区TOP顶刊《Energy》的改进蜣螂算法。 论文引用如下&#xff1a; Li Y, Sun K, Yao Q, et al. A dual-optimization wind speed forecasting model based on deep learning and improved dung beetle optimization algorithm[J]. Ener…...

C# 如何实现一个事件总线

EventBus&#xff08;事件总线&#xff09;是一种用于在应用程序内部或跨应用程序组件之间进行事件通信的机制。 它允许不同的组件通过发布和订阅事件来进行解耦和通信。在给定的代码片段中&#xff0c;我们可以看到一个使用C#实现的Event Bus。它定义了一些接口和类来实现事件…...

Python学习路线图

防止忘记&#xff0c;温故知新 进阶路线...

作业2.14

chgrp: 只能修改文件的所属组 chgrp 新的组 文件名 要求&#xff1a;修改的目标组已经存在 chown: chown 新的用户名 文件名 sudo chown root &#xff1a;1 将文件1的所属组用户和所属组用户都改为root sudo chown root&#xff1a;ubuntu 1 将文件1的所属用户…...

基于python+django+mysql的小区物业管理系统

该系统是基于pythondjango开发的小区物业管理系统。适用场景&#xff1a;大学生、课程作业、毕业设计。学习过程中&#xff0c;如遇问题可以在github给作者留言。主要功能有&#xff1a;业主管理、报修管理、停车管理、资产管理、小区管理、用户管理、日志管理、系统信息。 演示…...

控制与状态机算法

控制与状态机算法是计算机科学、电子工程和自动化领域中常用的一种设计工具,它用来描述一个系统的行为,该系统在不同时间点可以处于不同的状态,并且其行为取决于当前状态以及输入的信号或事件。状态机算法的核心概念包括: 状态(State):系统的任何可能配置。每个状态代表…...

sql常用语句小结

创建表&#xff1a; create table 表名&#xff08; 字段1 字段类型 【约束】【comment 字段1注释】&#xff0c; //【】里面的东西可以不用加上去 字段2 字段类型 【约束】【comment 字段2注释】 &#xff09;【comment 表注释】 约束&#xff1a;作用于表中字段上的规则…...

云计算基础-虚拟机迁移原理

什么是虚拟机迁移 虚拟机迁移是指将正在运行的虚拟机实例从一个物理服务器&#xff08;或主机&#xff09;迁移到另一个物理服务器&#xff08;或主机&#xff09;的过程&#xff0c;而不会中断虚拟机的运行。 虚拟机拟机迁移分类虚 热迁移&#xff1a;开机状态下迁移 冷迁…...

云计算基础-云计算概念

云计算定义 云计算是一种基于互联网的计算方式&#xff0c;通过这种计算方式&#xff0c;共享的软硬件资源和信息可以按需提供给计算机和其他设备。云计算依赖资源共享以达成规模经济&#xff0c;类似基础设置(如电力网)。 云计算最基本的概念就是云加端&#xff0c;我们有一个…...

如何将阿里云服务器迁移

&#x1f4d1;前言 本文主要是如何将阿里云服务器迁移实现数据转移的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️** &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x1f304;每日…...

如何将本地的python项目部署到linux服务器中

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 。 前言 本地写好的python项目&#xff0c;如何部署在服务器上运行呢&#xff1f;今天&#xff0c;我们就来抽一点点时间来看看。&#xff08;网上找的资料&#xff0c;大部分都囫囵吞枣的…...

每日五道java面试题之java基础篇(五)

目录&#xff1a; 第一题. final、finally、finalize 的区别&#xff1f;第二题. 和 equals 的区别&#xff1f;第三题.hashCode 与 equals?第四题. Java 是值传递&#xff0c;还是引⽤传递&#xff1f;第五题 深拷贝和浅拷贝&#xff1f; 第一题. final、finally、finalize 的…...

HiveSQL——用户行为路径分析

注&#xff1a;参考文档&#xff1a; SQL之用户行为路径分析--HQL面试题46【拼多多面试题】_路径分析 sql-CSDN博客文章浏览阅读2k次&#xff0c;点赞6次&#xff0c;收藏19次。目录0 问题描述1 数据分析2 小结0 问题描述已知用户行为表 tracking_log&#xff0c; 大概字段有&…...

专利的申请

申请发明或者实用新型专利的&#xff0c;应当提交请求书、说明书及其摘要和权利要求书等文件。 请求书应当写明发明或者实用新型的名称&#xff0c;发明人或者设计人的姓名&#xff0c;申请人姓名或者名称、地址&#xff0c;以及其他事项。 说明书应当对发明或者实用新型作出清…...

嵌入式学习 C++ Day5、6

嵌入式学习 C Day5、6 一、思维导图 二、作业 1.以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系&#xff1a; 比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴…...

阿里云香港服务器cn2速度测试和租用价格表

阿里云香港服务器中国香港数据中心网络线路类型BGP多线精品&#xff0c;中国电信CN2高速网络高质量、大规格BGP带宽&#xff0c;运营商精品公网直连中国内地&#xff0c;时延更低&#xff0c;优化海外回中国内地流量的公网线路&#xff0c;可以提高国际业务访问质量。阿里云服务…...

《学成在线》微服务实战项目实操笔记系列(P92~P120)【下】

史上最详细《学成在线》项目实操笔记系列【下】&#xff0c;跟视频的每一P对应&#xff0c;全系列18万字&#xff0c;涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳&#xff0c;参考这篇&#xff0c;相信会带给你极大启发。 四、课程发布模块 4.1 (课程发布)模块需求…...

php数据类型以及运算符、判断条件

php数据类型以及运算符 1. php数据类型2. 使用举例3. 运算符4. 判断条件if else elseif 1. php数据类型 包括 String(字符串)、Integer(整型)、Float(浮点型)、Boolean(布尔型)、Array(数组)、Object(对象)、NULL(空值) 2. 使用举例 1.字符串 2.整型 3.浮点型 4.布尔型 5.数组…...

大数据01-导论

零、文章目录 大数据01-导论 1、数据与数据分析 **数据&#xff1a;是事实或观察的结果&#xff0c;是对客观事物的逻辑归纳&#xff0c;是用于表示客观事物的未经加工的原始素材。**数据可以是连续的值&#xff0c;比如声音、图像&#xff0c;称为模拟数据&#xff1b;也可…...

智能网卡(SmartNIC):增强网络性能

在当今的数字时代&#xff0c;网络性能和数据安全是各行各业面临的关键挑战。智能网卡是一项颠覆性的技术创新&#xff0c;对增强网络性能和加强数据安全性具有关键推动作用。本文旨在探讨智能网卡的工作原理及其在不同应用场景中的重要作用。 什么是智能网卡&#xff1f; 智…...

算法刷题day14

目录 引言一、平均二、三国游戏三、松散子序列 引言 今天做了三道新题&#xff0c;类型是贪心、枚举、DP&#xff0c;不是特别难&#xff0c;但是努力一下刚好能够够得上&#xff0c;还是不错的&#xff0c;只要能够一直坚持下去&#xff0c;不断刷题不断总结&#xff0c;就是…...

个性签名大全

只许一生浮世清欢愿我以孤独作为铠甲&#xff0c;自此不再受伤愿我是阳光&#xff0c;明媚而不忧伤我不敢太勇敢太执着太骄傲&#xff0c;我怕失去开始你是我的天使&#xff0c;最后你是我的唯一姐的霸气&#xff0c;无人能比&#xff0c;哥的傲气&#xff0c;无人能朋唯有万事…...

前端常用代码整理(不断更新中)— js,jquery篇(2)

目录 1.随机生成字符串 2.删除数组中重复元素 3.RGB到十六进制转换机制 4.打乱一个数组&#xff0c;重新组合 5.获取两个日期的时间间隔 &#xff08;天数&#xff09; 6.获取当天属于今年的第几天 7.截取字符串长度,超过部分显示为 ... 8.判断数组是否为空 9.英文句子首…...

普中51单片机学习(六)

点亮第一个LED LED相关知识 LED,即发光二极管&#xff0c;是一种半导体固体发光器件。工作原理为&#xff1a;LED的工作是有方向性的&#xff0c;只有当正级接到LED阳极&#xff0c;负极接到LED的阴极的时候才能工作&#xff0c;如果反接LED是不能正常工作的。其原理图如下 …...

visual studio注册码

最近在研究c/c 安装visual studio 需要注册 技术博客http://idea.coderyj.com/ 注册码 Visual Studio 2022(VS2022)激活码&#xff1a; Pro&#xff08;专业版&#xff09;: TD244-P4NB7-YQ6XK-Y8MMM-YWV2J Enterprise&#xff08;企业版&#xff09;: VHF9H-NXBBB-638P6-6JHC…...

Studio One 6.5下载安装激活图文教程

Studio One 6.5是由PreSonus公司打造一款功能强大的数字音乐创作软件&#xff0c;不仅为用户们提供了制作、混合、掌握和执行所有操作&#xff0c;还提供了简洁直观的主界面&#xff0c;因此使用起来也是十分的简单&#xff0c;就算是初学者也可以快速的上手使用起来&#xff0…...

Kubernetes(K8S)集群部署实战

目录 一、准备工作1.1、创建3台虚拟机1.1.1、下载虚拟机管理工具1.1.2、安装虚拟机管理工具1.1.3、下载虚Centos镜像1.1.4、创建台个虚拟机1.1.5、设置虚拟机网络环境 1.2、虚拟机基础配置&#xff08;3台虚拟机进行相同处理&#xff09;1.2.1、配置host1.2.2、关闭防火墙1.2.3…...

流畅的Python(十)-序列的修改、散列和切片

一、核心要义 以第九章定义的二维向量为基础&#xff0c;定义表示多为向量的Vector类。该类将支持如下功能&#xff1a; 1. 基本的序列协议 2. 适当的切片支持&#xff0c;且返回的是新Vector实例 3.综合各个元素的值计算散列值 4.格式化展示 二、代码示例 1、前情提要 …...

TCP/IP五层各层协议详解

TCP/IP协议栈是网络通信的基础&#xff0c;它由五层协议组成&#xff0c;分别是物理层、数据链路层、网络层、传输层和应用层。以下是对各层协议的详细解释&#xff1a; 1. 物理层&#xff08;Physical Layer&#xff09;&#xff1a;该层负责传输比特流&#xff0c;主要定义传…...

MySQL 基础知识(九)之视图

目录 1 视图的介绍 2 视图算法 3 创建视图 4 查看视图结构 5 修改视图 6 删除视图 7 参考文档 1 视图的介绍 视图是一张并不存储数据的虚拟表&#xff0c;其本质是根据 SQL 语句动态查询数据库中的数据。数据库中只存放了视图的定义&#xff0c;通过 SQL 语句使用视图时…...

算法之力扣数青蛙

题目连接 文章目录 题目解析算法原理第一步第二步第三步第三步第四步指向o 代码讲解代码实现 题目解析 先给大家来讲解一下这个题目的意思吧&#xff0c;这个题目是说呢给你一个蛙叫的字符串让你去设计一个算法求出发出这种蛙叫最少需要几只青蛙。比如说第一个样例发出这种叫声…...

【后端高频面试题--Nginx篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;后端高频面试题 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 后端高频面试题--Nginx篇 往期精彩内容什么是Nginx&#xff1f;为什么要用Nginx&#xff1f;为…...

TiDB 在医疗保障信息平台的应用实践

文章介绍了 TiDB 在医疗保障信息平台中的应用。东软医保云应用管理平台通过与 TiDB 联合&#xff0c;成功满足了医疗保障业务中高并发、实时性和复杂查询的要求。在某地市医疗保障信息平台的实践中&#xff0c;TiDB 分布式数据库有效实现了在线交易和实时分析服务&#xff0c;日…...