joblib.dump()
import joblib
joblib.dump()
是 Python 中的一个函数,主要用于将对象保存到磁盘上的二进制文件中,以便后续加载和使用。它通常用于保存机器学习模型、大型数据集或其他需要长期保存的 Python 对象。
下面是 joblib.dump()
函数的详细解释以及参数的说明:
joblib.dump(value, filename, compress=0, protocol=None, cache_size=None)
-
value
:要保存到磁盘的 Python 对象。这可以是任何 Python 对象,例如模型、数据集、列表、字典等。 -
filename
:要保存对象的文件名(包括路径)。这是一个必需的参数。 -
compress
:用于指定压缩级别的整数。默认值为 0,表示不使用压缩。如果将其设置为 1,则启用轻量级压缩,如果设置为 3,则启用较强的压缩。较高的压缩级别可能会减小文件大小,但可能需要更多的时间来保存和加载文件。 -
protocol
:用于指定协议的整数。默认值为 None,表示使用默认的协议。协议用于确定对象的序列化方式,通常情况下无需指定。 -
cache_size
:用于指定在将对象保存到磁盘之前,是否在内存中缓存对象的最大尺寸。默认值为 None,表示不使用缓存。如果设置为一个整数,它将限制在将对象保存到磁盘之前,可以缓存在内存中的对象大小。这对于处理大型对象时可能会有所帮助。
下面是一个示例,演示如何使用 joblib.dump()
将一个列表保存到磁盘文件中:
import joblib
# 要保存的数据
my_list = [1, 2, 3, 4, 5]
# 将数据保存到文件
filename = 'my_list.pkl'
joblib.dump(my_list, filename)
# 从文件加载数据
loaded_list = joblib.load(filename)
print(loaded_list)
在这个示例中,我们首先将一个列表 my_list
保存到名为 my_list.pkl
的文件中,然后使用 joblib.load()
从文件中加载数据并打印出来。这个过程允许您在不丢失数据的情况下长期保存和恢复 Python 对象。
cdist()
cdist()
是 SciPy 库中的一个函数,用于计算两组数据之间的距离。它主要用于计算矩阵或数组中每一对数据点之间的距离,并返回一个距离矩阵。这个函数对于各种科学和工程应用中的距离计算非常有用,例如聚类、空间分析、模式识别等。
下面是 cdist()
函数的详细解释以及参数的说明:
scipy.spatial.distance.cdist(XA, XB, metric='euclidean', p=2, V=None, VI=None, w=None)
-
XA
和XB
:分别是两个形状相同的数组、矩阵或数据集,用于计算之间的距离。XA
中的每一行代表一个数据点,而XB
中的每一行也代表一个数据点。两者的列数必须相同,因为要计算它们之间的距离。 -
metric
:用于定义计算距离的方法的字符串。默认值为 ‘euclidean’,表示欧氏距离。常见的距离度量包括:- ‘euclidean’:欧氏距离(默认)。
- ‘cityblock’:曼哈顿距离。
- ‘cosine’:余弦相似度。
- ‘correlation’:相关性。
- ‘jaccard’:杰卡德距离(用于二进制数据)。
-
p
:用于minkowski
距离的参数,默认值为 2。当metric='minkowski'
时,此参数用于指定minkowski
距离的度量方式。 -
V
和VI
:可选的权重参数。它们允许为距离的每个维度分配不同的权重,以影响距离的计算。通常,不需要指定这些参数,除非你需要特定的权重设置。 -
w
:可选的数组,用于指定距离计算的加权方案。与V
和VI
类似,它用于为不同的维度分配权重。
下面是一个示例,演示如何使用 cdist()
计算两组数据之间的欧氏距离:
import numpy as np
from scipy.spatial.distance import cdist
# 创建两组数据
XA = np.array([[1, 2], [3, 4], [5, 6]])
XB = np.array([[7, 8], [9, 10]])
# 计算欧氏距离
distances = cdist(XA, XB, metric='euclidean')
print(distances)
[[ 8.48528137 11.3137085 ]
[ 5.65685425 8.48528137]
[ 2.82842712 5.65685425]]
输出将是一个距离矩阵,其中每个元素代表了 XA
中的一个点与 XB
中的一个点之间的欧氏距离。这个距离矩阵可以用于各种距离相关的计算和分析。
sklearn.datasets
make_blobs() 函数生成数据
from sklearn.datasets import make_blobs
make_blobs()
是 scikit-learn 中的一个函数,用于生成多类别的随机数据集,通常用于聚类算法的演示和测试。以下是 make_blobs
函数的各个参数的详细解释,以及一些示例:
from sklearn.datasets import make_blobs
# 使用 make_blobs 生成示例数据集
X, y = make_blobs(
n_samples=100, # 总样本数
n_features=2, # 特征维度
centers=3, # 产生的簇(类别)数量
cluster_std=1.0, # 簇的标准差,控制簇的分散程度
center_box=(-10, 10), # 簇的中心范围
random_state=42 # 随机数生成器的种子,以便重现相同的数据
)
以下是 make_blobs
的参数详解:
-
n_samples:生成的样本总数。这是一个整数,表示你希望生成的样本数量。
-
n_features: default=2.生成的数据的特征维度。通常,这是一个二维或三维的数据集,用于可视化。在示例中,特征维度为 2,即生成的数据有两个特征。
-
centers:簇(类别)的数量。这是一个整数,表示你希望生成多少个不同的簇。
-
当
centers
参数为整数时(例如,centers=3
),它表示要生成的簇(类别)的数量。函数将在数据集中随机生成指定数量的簇,每个簇都具有随机确定的中心坐标。 -
当
centers
参数为数组时(例如,centers=[[1, 1], [2, 2], [3, 3]]
),它表示要生成的簇的中心坐标。每个元素是一个长度为n_features
的坐标数组,表示一个簇的中心位置。 -
如果
n_samples
参数是一个整数,且centers
参数为None
,那么默认情况下,函数会生成 3 个簇,并在数据集中随机确定它们的中心坐标。 -
如果
n_samples
参数是一个数组,那么centers
参数必须为None
或一个与n_samples
数组长度相等的数组,其中每个元素都是一个长度为n_features
的坐标数组。这种情况下,你可以精确地指定每个样本所属的中心坐标。
-
总之,centers
参数控制了生成数据集时簇的数量和中心坐标,你可以根据需要选择不同的方式来定义它。
-
cluster_std:簇的标准差,用于控制簇内样本的分散程度。较小的值会导致更紧密的簇,较大的值会导致更分散的簇。
-
center_box:簇中心的坐标范围。通常是一个元组,包含两个值,表示每个特征的最小和最大坐标。这有助于控制生成的簇中心的位置。
-
random_state:随机数生成器的种子。使用相同的种子值可以确保每次运行代码时生成相同的随机数据,有助于可重现性。
生成的数据集 X
包含样本的特征,y
包含与每个样本关联的类别标签。通常,你可以使用这些数据集来测试和演示聚类算法或可视化多类别数据。
返回值
make_blobs()
函数返回一个元组,其中包含两个元素:
-
X:一个 NumPy 数组,包含生成的样本的特征数据。这是一个二维数组,其中每行表示一个样本,每列表示一个特征。
-
y:一个 NumPy 数组,包含与每个样本关联的类别标签。这个数组的长度与生成的样本数量相同,每个元素表示相应样本所属的类别。
通常,你可以使用 X
数组进行数据分析、可视化或机器学习任务,而 y
数组用于监督学习的标签。make_blobs()
的返回值允许你轻松生成用于测试和演示目的的多类别数据集。
让我们通过一个具体的示例来说明 make_blobs()
的返回值是什么。我们将使用该函数生成一个简单的示例数据集,并展示返回的 X
和 y
数组的内容。
from sklearn.datasets import make_blobs
# 使用 make_blobs 生成示例数据集
X, y = make_blobs(n_samples=100, n_features=2, centers=3, random_state=42)
# 打印 X 和 y 的前几行
print("X 数组的前几行:")
print(X[:5]) # 打印 X 数组的前5行
print("\ny 数组的前几行:")
print(y[:5]) # 打印 y 数组的前5行
运行以上代码后,你将看到类似于以下输出:
X 数组的前几行:
[[-6.59605409 9.9249165 ]
[ 0.26884422 5.46089082]
[-7.11099611 10.34723435]
[ 0.00472168 4.05424002]
[-6.75648673 9.23036407]]
y 数组的前几行:
[1 2 1 2 1]
在这个示例中,我们使用 make_blobs()
生成了一个包含100个样本和2个特征的示例数据集。X
数组包含了样本的特征数据,而 y
数组包含了每个样本的类别标签。
-
X
数组的前几行包含了样本的特征值。每一行是一个样本,每一列是一个特征。例如,第一行[-6.59605409 9.9249165 ]
表示一个样本,具有两个特征,分别为 -6.59605409 和 9.9249165。 -
y
数组的前几行包含了每个样本的类别标签。例如,第一行的1
表示第一个样本属于类别1,第二行的2
表示第二个样本属于类别2,以此类推。
这就是 make_blobs()
函数的返回值。X
包含了特征数据,y
包含了相应的类别标签,你可以使用这些数据进行分析、可视化或机器学习任务。
下面是一个简单的示例,演示如何使用 make_blobs
生成随机数据集并可视化它:
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
# 生成示例数据集
X, y = make_blobs(n_samples=100, n_features=2, centers=3, cluster_std=1.0, center_box=(-10, 10), random_state=42)
# 可视化数据集
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis')
plt.xlabel('特征 1')
plt.ylabel('特征 2')
plt.title('随机生成的数据集')
plt.show()
这个示例生成了一个包含三个簇的数据集,并将其可视化为散点图,使用不同的颜色表示不同的类别。
make_moons()
sklearn.datasets.make_moons()
是 scikit-learn 库中用于生成一个样本数量固定的月亮形状(moon-shaped)二分类数据集的函数。该数据集通常用于测试和演示分类算法的性能,因为它包含在一个二维平面上分布的两个不同的半圆形状的类别。
以下是 make_moons()
函数的基本信息:
函数签名:
sklearn.datasets.make_moons(n_samples=100, *, shuffle=True, noise=None, random_state=None)
参数解释:
n_samples
: 生成的样本数量,默认为 100。shuffle
: 是否打乱样本,默认为True
。noise
: 添加到数据中的高斯噪声的标准差。默认为None
,表示无噪声。random_state
: 用于控制生成数据的随机数生成器的种子。
返回值:
返回一个包含两个数组的元组 (X, y)
,其中 X
是形状为 (n_samples, 2)
的数组,包含样本的特征,y
是形状为 (n_samples,)
的数组,包含对应样本的标签(0 或 1)。
方法:
无特定方法,返回的是 NumPy 数组。
属性:
无特定属性。
应用例子:
from sklearn.datasets import make_moons
import matplotlib.pyplot as plt
# 例子:生成一个包含 200 个样本的月亮形状数据集
X, y = make_moons(n_samples=200, shuffle=True, noise=0.1, random_state=42)
# 打印结果
print("Example:")
print("Shape of X:", X.shape)
print("Shape of y:", y.shape)
# 可视化数据集
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Spectral, edgecolors='k')
plt.title("Moon-shaped Dataset")
plt.show()
打印结果:
Example:
Shape of X: (200, 2)
Shape of y: (200,)
在这个例子中,make_moons()
函数生成了一个包含 200 个样本的月亮形状数据集,其中每个样本有两个特征。然后,使用散点图可视化了数据集,其中类别用不同的颜色表示。生成的数据集的形状为 (200, 2)
,标签的形状为 (200,)
。
sklearn.base
clone
作用:
sklearn.base.clone
函数用于创建一个模型的深度复制,保留模型的参数和配置。这对于在不同任务或数据集上使用相同模型结构的不同实例非常有用。
函数签名:
sklearn.base.clone(estimator, safe=True)
返回值:
返回传入模型的深度复制。
参数解释:
-
estimator
: 要克隆的模型对象。 -
safe
: 是否使用安全模式,即使用copy.deepcopy
。默认是True。
方法:
clone
函数没有显式的方法。
属性:
没有显式的属性。
参数应用的例子:
from sklearn.linear_model import LogisticRegression
from sklearn.base import clone
# 初始化模型
model = LogisticRegression(C=1.0, max_iter=100)
# 使用clone函数创建模型的深度复制
cloned_model = clone(model)
# 修改克隆的模型的参数
cloned_model.set_params(C=0.5, max_iter=50)
# 打印原始模型和克隆模型的参数
print("Original Model Parameters:", model.get_params())
print("Cloned Model Parameters:", cloned_model.get_params())
在这个例子中,首先初始化了一个LogisticRegression
模型,并使用clone
函数创建了该模型的深度复制。然后,通过修改克隆模型的参数,演示了如何在保留原始模型不变的情况下,创建一个具有不同配置的模型实例。最后,打印了原始模型和克隆模型的参数,以便比较它们之间的差异。
sklearn.preprocessing
PolynomialFeatures
sklearn.preprocessing.PolynomialFeatures
是 scikit-learn 库中用于生成多项式特征的类。它将输入数据集中的特征转换为多项式特征,以提高模型对数据的拟合能力。
类签名:
sklearn.preprocessing.PolynomialFeatures(degree=2, interaction_only=False, include_bias=True, order='C')
参数解释:
degree
: 多项式的阶数,默认是 2。interaction_only
: 如果为 True,仅生成交互项特征,不包括特征的幂,默认是 False。include_bias
: 如果为 True,则包含偏置列(即全为 1 的列),默认是 True。order
: 控制生成多项式的顺序,‘C’ 表示按照 C-style(行为主序)的方式排列,‘F’ 表示按照 Fortran-style(列为主序)的方式排列。
属性:
powers_
: 一个二维数组,表示生成的多项式特征的次数。
方法:
fit(X[, y])
: 计算输入数据X
中特征的次数。transform(X)
: 将输入数据X
转换为多项式特征。fit_transform(X[, y])
: 计算并应用多项式特征转换。
参数应用的例子:
from sklearn.preprocessing import PolynomialFeatures
import numpy as np
# 创建一个示例数据集
X = np.array([[1, 2],
[3, 4],
[5, 6]])
# 初始化 PolynomialFeatures
poly = PolynomialFeatures(degree=2, include_bias=False)
# 计算并应用多项式特征转换
X_poly = poly.fit_transform(X)
# 打印结果
print("Original Features:")
print(X)
print("\nPolynomial Features:")
print(X_poly)
在这个例子中,原始数据集 X
包含两个特征,通过使用 PolynomialFeatures
将这两个特征的多项式特征进行转换。打印的结果将显示原始特征和生成的多项式特征:
Original Features:
[[1 2]
[3 4]
[5 6]]
Polynomial Features:
[[ 1. 2. 1. 2. 4.]
[ 3. 4. 9. 12. 16.]
[ 5. 6. 25. 30. 36.]]
在生成的多项式特征中,每一列都代表了原始特征的不同次幂以及交互项。例如,第一列是原始特征的一次幂,第二列是原始特征的二次幂,第三列和第四列是原始特征之间的交互项。
StandardScaler
sklearn.preprocessing.StandardScaler
是 scikit-learn 库中用于将数据进行标准化(标准差为1,均值为0)的类。标准化是数据预处理的一种常见方法,可以提高某些机器学习算法的性能。
类签名:
sklearn.preprocessing.StandardScaler(copy=True, with_mean=True, with_std=True)
参数解释:
copy
: 如果为 True,则复制输入数据,否则在原地操作。默认是 True。with_mean
: 如果为 True,则将均值设为非零值,否则保持零均值。默认是 True。with_std
: 如果为 True,则缩放标准差,否则保持单位标准差。默认是 True。
属性:
scale_
: 每个特征的缩放因子,即标准差。mean_
: 每个特征的均值。
方法:
fit(X[, y])
: 计算每个特征的均值和标准差。transform(X)
: 标准化给定的数据集X
。fit_transform(X[, y])
: 计算并应用均值和标准差的标准化转换。
参数应用的例子:
from sklearn.preprocessing import StandardScaler
import numpy as np
# 创建一个示例数据集
X = np.array([[1, 2],
[3, 4],
[5, 6]])
# 初始化 StandardScaler
scaler = StandardScaler()
# 计算并应用标准化转换
X_scaled = scaler.fit_transform(X)
# 打印结果
print("Original Features:")
print(X)
print("\nScaled Features:")
print(X_scaled)
print("\nMean of Each Feature:")
print(scaler.mean_)
print("\nScale of Each Feature (Standard Deviation):")
print(scaler.scale_)
在这个例子中,原始数据集 X
包含两个特征。通过使用 StandardScaler
进行标准化转换,得到了标准化后的数据集 X_scaled
,同时打印了每个特征的均值和标准差:
Original Features:
[[1 2]
[3 4]
[5 6]]
Scaled Features:
[[-1.22474487 -1.22474487]
[ 0. 0. ]
[ 1.22474487 1.22474487]]
Mean of Each Feature:
[3. 4.]
Scale of Each Feature (Standard Deviation):
[1.63299316 1.63299316]
在标准化后的数据集中,每个特征都具有零均值和单位标准差。scaler.mean_
和 scaler.scale_
分别存储了每个特征的均值和标准差。
sklearn.model_selection
train_test_split()
from sklearn.model_selection import train_test_split
train_test_split
是 Scikit-Learn 中用于将数据集划分为训练集和测试集的函数。这个函数通常用于监督学习任务,其中一个数据集用于训练模型,另一个用于评估模型的性能。下面是关于 train_test_split
函数的详细解释:
作用:
train_test_split
用于将输入的数据集划分为训练集和测试集,以便进行模型训练和性能评估。
返回值:
train_test_split
返回一个包含多个数组的元组,包括训练集和测试集。通常,返回的元组包含以下数组:
X_train
:训练数据的特征。X_test
:测试数据的特征。y_train
:训练数据的目标标签。y_test
:测试数据的目标标签。
这些数组可以用于训练模型和评估模型性能。
参数:
train_test_split
函数有多个参数,以下是一些常用的参数:
-
arrays
:- 输入的数据集或多个数组(特征矩阵和目标标签)。通常是一个特征矩阵和一个目标标签数组。
-
test_size
(默认值为None
):- 测试集的大小。可以是一个浮点数(表示测试集占总数据集的比例)或整数(表示测试集的绝对大小)。
-
train_size
(默认值为None
):- 训练集的大小。可以是一个浮点数(表示训练集占总数据集的比例)或整数(表示训练集的绝对大小)。
-
random_state
(默认值为None
):- 随机种子。如果设置为一个整数,它会确定随机数据划分的方式,以确保划分是可重复的。
-
shuffle
(默认值为True
):- 是否对数据进行随机洗牌,以确保划分是随机的。
-
stratify
(默认值为None
):- 如果设置为目标标签数组,它会确保训练集和测试集中的类别分布与原始数据集中的类别分布一致,用于处理类别不平衡问题。
kwargs:
除了上述参数外,train_test_split
还接受其他参数,例如 shuffle
、random_state
等。你可以根据需要进一步配置函数的行为。
示例:
以下是一个简单的示例,演示如何使用 train_test_split
划分数据集:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 加载鸢尾花数据集
data = load_iris()
X = data.data
y = data.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 输出训练集和测试集的大小
print("训练集大小:", len(X_train))
print("测试集大小:", len(X_test))
在这个示例中,我们首先加载了鸢尾花数据集,然后使用 train_test_split
函数将数据集划分为训练集和测试集。最后,我们打印了训练集和测试集的大小。
sklearn.linear_model
正则化
在线性回归和逻辑回归等线性模型中,正则化是一种用于控制模型复杂度以避免过拟合的技术。正则化通过在损失函数中引入附加的惩罚项来实现,这个惩罚项会对模型的系数(权重)进行约束,防止它们过于大或过于小,从而使模型更加稳定和泛化能力更强。
在线性回归中,有两种常见的正则化方法:
-
L1正则化(Lasso正则化):L1正则化通过在损失函数中添加系数的绝对值之和来实现。它的损失函数可以表示为:
Loss = 残差平方和 + α * Σ|系数|
其中,α(alpha)是正则化强度的参数,控制正则化的程度。L1正则化有助于产生稀疏模型,即一些系数会变为零,从而自动选择了特征的子集。
-
L2正则化(Ridge正则化):L2正则化通过在损失函数中添加系数的平方和来实现。它的损失函数可以表示为:
Loss = 残差平方和 + α * Σ(系数^2)
同样,α(alpha)是正则化强度的参数。L2正则化有助于防止系数过大,从而减轻了特征之间的共线性问题。
正则化的作用包括:
-
防止过拟合:通过限制模型的复杂度,正则化可以降低模型在训练数据上的拟合程度,从而提高模型在未见过的数据上的泛化性能。
-
特征选择:L1正则化可以自动选择与目标变量相关的特征,将不相关的特征的系数缩小至零。
-
减少过大系数:L2正则化可以降低系数的大小,减少模型对噪声的敏感性。
在Scikit-Learn中,你可以使用 LinearRegression
类的 penalty
参数来指定正则化类型,通常设置为 'l1'
(L1正则化)或 'l2'
(L2正则化),以及 alpha
参数来控制正则化的强度。逻辑回归中也有相似的参数来控制正则化。
sklearn.linear_model.Ridge 岭回归
sklearn.linear_model.Ridge
是 scikit-learn 库中用于进行岭回归的类。岭回归是一种带有正则化项的线性回归方法,旨在解决多重共线性问题。
类签名:
sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True, normalize=False, copy_X=True, max_iter=None, tol=0.001, solver='auto', random_state=None)
参数解释:
alpha
: 正则化强度,控制正则化的强度。较大的值表示较强的正则化。默认是 1.0。fit_intercept
: 是否拟合截距。如果为 False,则模型没有截距。默认是 True。normalize
: 是否对数据进行标准化。如果为 True,则在拟合模型之前对数据进行标准化。默认是 False。copy_X
: 是否复制输入数据 X。如果为 True,则在拟合模型之前对输入数据进行拷贝。默认是 True。max_iter
: 最大迭代次数。默认是 None,表示没有限制。tol
: 拟合停止的容忍度。当两次迭代之间的权重变化小于 tol 时,停止迭代。默认是 0.001。solver
: 用于计算权重的求解器。可选值有 ‘auto’、‘svd’、‘cholesky’、‘lsqr’、‘sparse_cg’、‘sag’。默认是 ‘auto’,表示根据数据自动选择求解器。random_state
: 随机数生成器的种子,用于在使用 SAG 求解器时控制数据洗牌。默认是 None。
属性:
coef_
: 系数,即回归系数。intercept_
: 截距。
方法:
fit(X, y[, sample_weight])
: 拟合岭回归模型。predict(X)
: 使用岭回归模型进行预测。score(X, y[, sample_weight])
: 返回拟合模型的决定系数 R^2。
参数应用的例子:
from sklearn.linear_model import Ridge
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import numpy as np
# 加载波士顿房价数据集
boston = load_boston()
X, y = boston.data, boston.target
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 初始化 Ridge 模型
ridge_model = Ridge(alpha=1.0)
# 拟合模型
ridge_model.fit(X_train, y_train)
# 预测
y_pred = ridge_model.predict(X_test)
# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
# 打印结果
print("Mean Squared Error:", mse)
print("Ridge Coefficients:", ridge_model.coef_)
print("Ridge Intercept:", ridge_model.intercept_)
在这个例子中,使用波士顿房价数据集,将数据集分为训练集和测试集。然后初始化一个 Ridge 模型,拟合模型并进行预测。最后计算均方误差并打印出 Ridge 模型的系数和截距。
sklearn.linear_model.Lasso
sklearn.linear_model.Lasso
是 scikit-learn 库中用于进行Lasso回归(带有L1正则化)的类。Lasso回归通过在损失函数中添加L1正则项来实现特征选择,有助于稀疏模型的构建。
类签名:
sklearn.linear_model.Lasso(alpha=1.0, fit_intercept=True, normalize=False, precompute=False, copy_X=True, max_iter=1000, tol=0.0001, warm_start=False, positive=False, random_state=None, selection='cyclic')
参数解释:
alpha
: 正则化强度,控制正则化的强度。较大的值表示较强的正则化。默认是 1.0。fit_intercept
: 是否拟合截距。如果为 False,则模型没有截距。默认是 True。normalize
: 是否对数据进行标准化。如果为 True,则在拟合模型之前对数据进行标准化。默认是 False。precompute
: 是否预计算 Gram 矩阵以加快计算速度。默认是 False。copy_X
: 是否复制输入数据 X。如果为 True,则在拟合模型之前对输入数据进行拷贝。默认是 True。max_iter
: 最大迭代次数。默认是 1000。tol
: 拟合停止的容忍度。当两次迭代之间的权重变化小于 tol 时,停止迭代。默认是 0.0001。warm_start
: 如果为 True,则使用前一次拟合的解作为初始值。默认是 False。positive
: 如果为 True,则强制权重为正。默认是 False。random_state
: 随机数生成器的种子,用于在使用 SAG 求解器时控制数据洗牌。默认是 None。selection
: 用于指定系数更新的算法。可选值有 ‘cyclic’ 和 ‘random’。默认是 ‘cyclic’。
属性:
coef_
: 系数,即回归系数。intercept_
: 截距。
方法:
fit(X, y[, sample_weight])
: 拟合Lasso回归模型。predict(X)
: 使用Lasso回归模型进行预测。score(X, y[, sample_weight])
: 返回拟合模型的决定系数 R^2。
参数应用的例子:
from sklearn.linear_model import Lasso
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import numpy as np
# 加载波士顿房价数据集
boston = load_boston()
X, y = boston.data, boston.target
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 初始化 Lasso 模型
lasso_model = Lasso(alpha=1.0)
# 拟合模型
lasso_model.fit(X_train, y_train)
# 预测
y_pred = lasso_model.predict(X_test)
# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
# 打印结果
print("Mean Squared Error:", mse)
print("Lasso Coefficients:", lasso_model.coef_)
print("Lasso Intercept:", lasso_model.intercept_)
在这个例子中,使用波士顿房价数据集,将数据集分为训练集和测试集。然后初始化一个 Lasso 模型,拟合模型并进行预测。最后计算均方误差并打印出 Lasso 模型的系数和截距。
LinearRegression()
from sklearn.linear_model import LinearRegression
sklearn.linear_model.LinearRegression()
是Scikit-Learn中用于构建线性回归模型的类。线性回归是一种用于解决回归问题的线性模型,它用于建立连续输出变量与输入特征之间的线性关系。
参数:
以下是 LinearRegression()
类的主要参数以及它们的详细解释:
-
fit_intercept
(默认值:True)- 决定是否计算截距(intercept)。如果设置为False,模型将不会计算截距,回归线将通过原点(0,0)。
-
normalize
(默认值:False)- 决定是否对输入特征进行标准化(缩放到均值为0,方差为1的分布)。
- 当设置为True时,将标准化输入特征。
-
copy_X
(默认值:True)- 决定是否复制输入特征。如果设置为True,将会复制原始的输入特征,否则会在原始数据上进行操作。
-
n_jobs
(默认值:None)- 用于并行处理的CPU核数。如果设置为-1,将使用所有可用的CPU核。
**kwargs
参数表示其他可选参数,这些参数通常用于定制线性回归模型的具体行为。以下是一些常见的可选参数以及它们的作用:
-
positive
(默认值:False)- 仅当
fit_intercept
为True时有效。如果设置为True,将确保拟合的线性回归系数是非负的。
- 仅当
-
copy_X
(默认值:True)- 决定是否复制输入特征。如果设置为True,将会复制原始的输入特征,否则会在原始数据上进行操作。
-
coef_init
(默认值:None)- 用于初始化系数的值。如果不是None,将使用指定的系数值作为初始值。
-
positive
(默认值:False)- 仅当
fit_intercept
为True时有效。如果设置为True,将确保拟合的线性回归系数是非负的。
- 仅当
方法(Methods):
-
fit(X, y[, sample_weight])
:拟合线性回归模型到训练数据。X
是训练数据的输入特征,y
是对应的输出变量。可选参数sample_weight
用于指定样本的权重。 -
predict(X)
:用已拟合的模型进行预测,给定输入特征X
,返回对应的预测值。 -
score(X, y[, sample_weight])
:计算模型的拟合优度,通常使用R²分数作为度量。X
是输入特征,y
是对应的输出变量。可选参数sample_weight
用于指定样本的权重。
属性(Attributes):
-
coef_
:模型的系数(回归系数),即线性回归模型中的权重。如果有多个特征,这将返回一个数组。 -
intercept_
:模型的截距项。 -
n_features_in_
:模型输入特征的数量。 -
rank_
:输入特征矩阵X
的秩。 -
singular_
:模型的奇异值。 -
residues_
:模型的残差平方和(SSE)。
这些方法和属性允许你进行模型训练、预测和评估,以及获取模型的参数信息。以下是一些使用这些方法和属性的示例代码:
from sklearn.linear_model import LinearRegression
# 创建线性回归模型
model = LinearRegression()
# 拟合模型到训练数据
X = [[1], [2], [3]]
y = [2, 4, 6]
model.fit(X, y)
# 获取回归系数和截距
coefficients = model.coef_
intercept = model.intercept_
# 进行预测
predicted = model.predict([[4]])
# 输出结果
print("Coefficients: ", coefficients)
print("Intercept: ", intercept)
print("Prediction for new data: ", predicted)
在这个示例中,我们创建了一个线性回归模型并拟合到训练数据。然后,我们使用 coef_
和 intercept_
属性获取模型的系数和截距,使用 predict
方法进行预测。这些方法和属性有助于训练、评估和使用线性回归模型。
现在,让我为你提供一个使用线性回归模型的简单示例:
import numpy as np
from sklearn.linear_model import LinearRegression
# 创建一些示例数据
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1) # 输入特征
y = np.array([2, 4, 5, 4, 5]) # 输出变量
# 创建线性回归模型
model = LinearRegression()
# 拟合模型
model.fit(X, y)
# 打印回归系数和截距
print("Coefficients: ", model.coef_)
print("Intercept: ", model.intercept_)
# 预测新数据点
new_data = np.array([6]).reshape(-1, 1)
predicted = model.predict(new_data)
print("Prediction for new data: ", predicted)
在这个示例中,我们首先创建了一些示例数据,然后创建了一个线性回归模型。模型被拟合到数据上,并打印出了回归系数和截距,以及对新数据点的预测结果。这是一个简单的线性回归的应用示例。
LogisticRegression()
from sklearn.linear_model import LogisticRegression
sklearn.linear_model.LogisticRegression()
是Scikit-Learn中用于构建逻辑回归模型的类。逻辑回归是一种用于解决二分类问题的线性模型,它可以用于预测二进制输出(通常为0或1)的概率。
参数:
以下是 LogisticRegression()
类的主要参数以及它们的详细解释:
-
penalty
(默认值:‘l2’)- 正则化项的惩罚类型。
- 可选值包括:‘l1’(L1正则化),‘l2’(L2正则化),‘none’(无正则化)。
-
dual
(默认值:False)- 决定是否使用对偶形式求解。
- 当样本数量(n_samples)大于特征数量(n_features)时,设置为True可以加速求解,但只适用于L2正则化。
-
tol
(默认值:1e-4)- 求解优化问题的收敛容忍度。如果损失函数的变化小于此值,求解过程将停止。
-
C
(默认值:1.0)- 正则化强度的倒数,控制正则化的强度。较小的值表示较强的正则化,较大的值表示较弱的正则化。
-
补充
multi_class{‘auto’, ‘ovr’, ‘multinomial’}, default=’auto’
逻辑回归(Logistic Regression)是一种用于解决二分类问题的机器学习算法。然而,当需要处理多分类问题时,就需要一些额外的策略来扩展逻辑回归。multi_class
参数就是用来控制这种扩展方式的。-
- ‘auto’
- 默认选项。
- 如果数据是二分类的,或者如果求解器(solver)是
liblinear
,则默认选择ovr
。 - 否则,默认选择
multinomial
。
-
- ‘ovr’ (One-Versus-Rest)
- 对于每一个类别,都会训练一个二分类的逻辑回归模型,该模型将该类别与其他所有类别区分开来。
- 例如,对于三个类别 A、B、C,会有三个模型:A vs (B+C)、B vs (A+C)、C vs (A+B)。
- 这个方法也称为“一对一”(One-Versus-One, OVO),但与 OVO 略有不同,因为它是一个类别与其他所有类别的比较。
-
- ‘multinomial’
- 这种方法直接在多类别上训练一个逻辑回归模型,它最小化的是多类别损失,即在整个概率分布上进行拟合。
- 这种方法通常用于处理真实的多类别问题,其中每个样本只属于一个类别。
- 注意:当求解器(solver)为
liblinear
时,multinomial
选项不可用。
-
总结
- ‘auto’ 会根据数据和求解器的类型自动选择
ovr
或multinomial
。 - ‘ovr’ 适用于二分类问题和多分类问题,特别是当使用
liblinear
求解器时。 - ‘multinomial’ 适用于多类别问题,并且当数据不是二分类或求解器不是
liblinear
时可用。
- ‘auto’ 会根据数据和求解器的类型自动选择
选择哪种方法取决于具体的应用场景和数据特性。在一些情况下,
ovr
可能表现更好,而在其他情况下,multinomial
可能更合适。 -
-
fit_intercept
(默认值:True)- 决定是否计算截距(intercept)。如果设置为False,模型将不会计算截距。
-
intercept_scaling
(默认值:1)- 仅当
fit_intercept
为True且使用L2正则化时,它可以放大正则化的影响。
- 仅当
-
class_weight
(默认值:None)- 用于处理不平衡类别的权重。可以设置为’balanced’来自动为不平衡类别分配权重,或者是一个字典,指定每个类别的权重。
-
random_state
(默认值:None)
- 随机数生成器的种子,用于初始化权重。
solver
(默认值:‘lbfgs’)
-
用于优化问题的求解器。
-
可选值包括:‘newton-cg’、‘lbfgs’、‘liblinear’、‘sag’、‘saga’。
在逻辑回归(
LogisticRegression
)中,参数solver
是一个用于求解优化问题的求解器(solver)的参数。逻辑回归模型的训练是一个优化问题,目标是找到一组系数(权重),使得损失函数最小化。不同的求解器采用不同的数学算法来解决这个优化问题。
以下是一些常见的 `solver` 参数取值以及它们的解释:
1. **'liblinear'**:
- 适用于小型数据集。使用了坐标下降法(coordinate descent)来求解优化问题。
- 在二元分类和多元分类问题上都有效。
- 对于 L1 正则化和 L2 正则化都适用。
2. **'newton-cg'**:
- 基于牛顿法的一种求解器。适用于小型数据集。
- 主要用于二元分类问题,不支持多元分类问题。
- 对于 L2 正则化适用。
3. **'lbfgs'**:
- 也是一种基于牛顿法的求解器。适用于小型数据集。
- 主要用于二元分类问题,不支持多元分类问题。
- 对于 L2 正则化适用。
4. **'sag'**:
- 随机平均梯度下降法(Stochastic Average Gradient Descent)的变种。适用于大型数据集。
- 主要用于二元分类问题,不支持多元分类问题。
- 对于 L2 正则化适用。
5. **'saga'**:
- 'sag' 求解器的变种,适用于大型数据集。
- 主要用于二元分类问题,不支持多元分类问题。
- 支持 L1 正则化和 L2 正则化,可以用于强制使系数更稀疏。
在选择 `solver` 参数时,需要考虑数据集的大小、问题的类型(二元分类还是多元分类)、正则化类型(L1 正则化还是 L2 正则化)以及求解速度等因素。通常情况下,'liblinear' 是一个良好的默认选择,但在特定情况下,可能需要根据实际需求选择其他求解器。
要选择最佳的 `solver` 参数,可以通过尝试不同的值,并使用交叉验证来评估模型性能。这可以帮助确定最适合你的数据和任务的求解器。
-
max_iter
(默认值:100)- 求解器的最大迭代次数。
-
multi_class
(默认值:‘auto’)- 多类别分类的策略。
- 可选值包括:‘ovr’(一对多)、‘multinomial’、‘auto’。
-
verbose
(默认值:0)- 控制详细程度的标志,设置为1或更大的值时会打印求解器的进度信息。
-
warm_start
(默认值:False)- 如果设置为True,可以重复使用上一个拟合结果以加速收敛。
-
n_jobs
(默认值:None)- 用于并行处理的CPU核数。如果设置为-1,将使用所有可用的CPU核。
-
l1_ratio
(默认值:None)- 仅在
penalty
为’elasticnet’时有效,控制L1正则化的比例。在0和1之间选择值。
- 仅在
-
fit_path
(默认值:True)- 仅在
penalty
为’elasticnet’时有效,决定是否拟合Elastic-Net路径,以便获得正则化路径信息。
- 仅在
-
solver_kwargs
(默认值:None)- 传递给底层求解器的额外参数。
sklearn.linear_model.LogisticRegression()
类提供了多种方法和属性,用于构建和操作逻辑回归模型。以下是一些常用的方法和属性以及它们的详细解释:
方法(Methods):
-
fit(X, y[, sample_weight])
:- 拟合逻辑回归模型到训练数据。
X
是训练数据的输入特征,y
是对应的目标输出(标签)。可选参数sample_weight
用于指定样本的权重。
- 拟合逻辑回归模型到训练数据。
-
predict(X)
:- 使用已拟合的模型进行预测,给定输入特征
X
,返回对应的预测类别(通常为0或1)。
- 使用已拟合的模型进行预测,给定输入特征
-
predict_proba(X)
:- 返回输入特征
X
属于每个类别的概率估计。结果是一个数组,每一行表示一个样本,每一列表示一个类别。
- 返回输入特征
-
score(X, y[, sample_weight])
:- 计算模型的性能得分,通常是准确度(Accuracy)。
X
是输入特征,y
是对应的目标输出(标签)。可选参数sample_weight
用于指定样本的权重。
- 计算模型的性能得分,通常是准确度(Accuracy)。
属性(Attributes):
-
coef_
:- 返回模型的系数(权重)。在逻辑回归(Logistic Regression)模型中,模型的系数(coefficients)也称为权重(weights),用于表示每个特征对于模型预测的影响程度。通常,系数的绝对值越大,表示该特征对预测的影响越大,而系数的正负表示特征对预测的方向性影响(正相关还是负相关)。对于多类别问题,每个类别都有一组系数。如果有多个特征,这将返回一个二维数组。
-
intercept_
:- 返回模型的截距项。对于多类别问题,每个类别都有一个截距项。
-
n_features_in_
:- 输入特征的数量。
-
classes_
:- 返回模型的类别标签。
-
n_iter_
:- 在拟合过程中迭代的次数。仅在使用某些求解器时才可用。
-
intercept_scaling_
:- 仅在使用L1正则化时有效,用于放大截距项的影响。
-
max_iter
:- 在拟合模型时指定的最大迭代次数。
-
penalty
:- 正则化项的惩罚类型。
-
C
:- 正则化强度的倒数,用于控制正则化的强度。
-
solver
:- 用于优化问题的求解器。
-
dual
:- 决定是否使用对偶形式求解。
-
fit_intercept
:- 决定是否计算截距项。
-
class_weight
:- 处理不平衡类别的权重。
-
random_state
:- 随机数生成器的种子。
这些方法和属性允许你进行模型训练、预测、评估以及获取模型参数信息。以下是一些使用这些方法和属性的示例代码:
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 载入示例数据
data = load_iris()
X, y = data.data, data.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建逻辑回归模型
model = LogisticRegression()
# 拟合模型到训练数据
model.fit(X_train, y_train)
# 使用模型进行预测
predicted = model.predict(X_test)
# 打印系数和截距
print("Coefficients: ", model.coef_)
print("Intercept: ", model.intercept_)
# 打印准确度
accuracy = model.score(X_test, y_test)
print("Accuracy: ", accuracy)
在这个示例中,我们创建了一个逻辑回归模型,并使用示例数据对其进行训练和预测。我们使用了 fit
方法进行拟合,predict
方法进行预测,score
方法计算准确度,以及 coef_
和 intercept_
属性获取模型参数。这些方法和属性有助于训练、评估和使用逻辑回归模型。
现在,让我为你提供一些参数的应用示例:
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
# 载入数据
iris = load_iris()
X, y = iris.data, iris.target
# 创建逻辑回归模型
model = LogisticRegression(C=1.0, solver='lbfgs', multi_class='auto')
# 拟合模型
model.fit(X, y)
# 打印系数
print("Coefficients: ", model.coef_)
# 预测样本
predicted = model.predict(X)
# 打印预测结果
print("Predictions: ", predicted)
在这个示例中,我们创建了一个逻辑回归模型,指定了一些参数(如正则化强度C、求解器solver、多类别分类策略multi_class等),然后拟合模型并进行预测。注意,这只是一个简单的示例,实际应用中需要根据具体问题来选择适当的参数和数据准备步骤。
SGDClassifier
作用:
SGDClassifier
是scikit-learn库中的一种线性分类器,使用随机梯度下降(Stochastic Gradient Descent,SGD)进行训练。它适用于大规模数据集,能够高效地进行模型训练。
函数签名:
class sklearn.linear_model.SGDClassifier(loss='hinge', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=1000, tol=1e-3, shuffle=True, verbose=0, epsilon=0.1, n_jobs=None, random_state=None, learning_rate='optimal', eta0=0.0, power_t=0.5, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, class_weight=None, warm_start=False, average=False)
返回值:
训练完成的分类器对象。
参数解释:
-
loss
: 损失函数,可选值为 ‘hinge’, ‘log’, ‘modified_huber’, ‘squared_hinge’, ‘perceptron’, 或者一个自定义的损失函数。默认是 ‘hinge’。hinge
用于支持向量机,log
用于逻辑回归。 -
penalty
: 正则化项,可选值为 ‘l2’, ‘l1’, ‘elasticnet’,默认是 ‘l2’。正则化可以防止过拟合。 -
alpha
: 正则化项的强度,一般是一个正的浮点数,默认是 0.0001。 -
l1_ratio
: 当penalty
为’elasticnet’时,混合参数,范围为[0, 1],默认是0.15。该参数控制L1和L2正则化的权重。 -
fit_intercept
: 是否拟合截距,默认是True。 -
max_iter
: 最大迭代次数,默认是1000。控制随机梯度下降的迭代次数。 -
tol
: 收敛阈值,如果两次迭代的损失差异小于该值,则认为模型已经收敛,默认是1e-3。 -
shuffle
: 是否在每次迭代前打乱数据,默认是True。 -
verbose
: 是否输出详细信息,默认是0。 -
epsilon
: 当loss
为’hinge’时,是一个关键参数,默认是0.1。 -
n_jobs
: 并行处理的数量,用于加速训练,默认是None,表示不并行。 -
random_state
: 随机种子,用于复现实验结果。 -
learning_rate
: 学习率,可选值为 ‘constant’, ‘optimal’, ‘invscaling’, ‘adaptive’,默认是 ‘optimal’。学习率的控制对模型训练至关重要。 -
eta0
: 初始学习率,当learning_rate
为’constant’时使用,默认是0.0。 -
power_t
: 反比例学习率的指数,默认是0.5。 -
early_stopping
: 是否启用提前停止来终止训练,默认是False。提前停止可以防止过拟合。 -
validation_fraction
: 用于提前停止的验证集比例,默认是0.1。 -
n_iter_no_change
: 连续多少次迭代损失不变时,触发提前停止,默认是5。 -
class_weight
: 类别权重,用于不平衡的类别,默认是None。 -
warm_start
: 是否重用上一次训练的解作为初始值,默认是False。 -
average
: 是否计算平均梯度,默认是False。平均梯度可以稳定训练过程。
方法:
fit(X, y, coef_init=None, intercept_init=None, sample_weight=None)
用于训练模型。
predict(X)
用于进行预测。
score(X, y, sample_weight=None)
返回模型的准确率。
属性:
coef_
模型的权重向量。
intercept_
模型的截距。
classes_
类别标签。
t_
已经看过的样本数目。
n_iter_
实际迭代次数。
参数应用的例子:
from sklearn.linear_model import SGDClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载数据集
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.2, random_state=42)
# 初始化SGDClassifier
clf = SGDClassifier(max_iter=1000, tol=1e-3)
# 训练模型
clf.fit(X_train, y_train)
# 预测
y_pred = clf.predict(X_test)
# 评估准确性
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
# 打印模型参数
print("Coefficients:", clf.coef_)
print("Intercept:", clf.intercept_)
print("Classes:", clf.classes_)
print("Number of iterations:", clf.n_iter_)
请注意,实际上,具体的参数设置和数据集可能需要根据具体情况进行调整。这个例子中使用的是鸢尾花数据集,你可以根据自己的需求替换为其他数据集。
sklearn.model_selection
cross_val_score
函数的返回值
cross_val_score
函数的返回值是一个包含多次交叉验证评估结果的数组(或列表),其中每个元素对应于一次交叉验证的评估分数。具体来说,返回值是一个 NumPy 数组,其中包含了每个验证折的性能指标值(例如准确性、均方误差等)。
这个数组的长度通常等于交叉验证的折数(由 cv
参数决定),每个元素对应于一次交叉验证的评估结果。你可以根据需要使用这些评估结果来分析模型的性能,例如计算平均值、标准差等统计信息,或者直接查看每次交叉验证的性能表现。
以下是一个示例代码,演示如何使用 cross_val_score
并查看其返回值:
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
# 创建一个决策树分类器
clf = DecisionTreeClassifier()
# 使用交叉验证评估模型性能,cv=5 表示使用 5 折交叉验证
scores = cross_val_score(clf, X, y, cv=5)
# 打印每次交叉验证的评估结果
print("每次交叉验证的评估分数:", scores)
# 打印平均分数和标准差
print("平均分数:", scores.mean())
print("标准差:", scores.std())
每次交叉验证的评估分数: [0.96666667 0.96666667 0.9 0.96666667 1. ]
平均分数: 0.9600000000000002
标准差: 0.03265986323710903
在这个示例中,scores
是一个包含 5 次交叉验证评估结果的数组,你可以根据需要对这些评估结果进行进一步的分析。
cross_val_score
作用:
cross_val_score
是scikit-learn库中用于执行交叉验证的函数。它通过将数据集划分为K个折叠(folds),在每个折叠上进行训练和验证,最终返回每个折叠的模型评分,以便进行模型性能评估。
函数签名:
sklearn.model_selection.cross_val_score(estimator, X, y=None, groups=None, scoring=None, cv=None, n_jobs=None, verbose=0, fit_params=None, pre_dispatch='2*n_jobs', error_score=nan)
返回值:
一个包含每个折叠上模型评分的数组。
参数解释:
-
estimator
: 要评估的模型对象。 -
X
: 特征矩阵。 -
y
: 目标变量。 -
groups
: 指定组标签以用于组交叉验证(GroupKFold等)。 -
scoring
: 评分指标,用于衡量模型性能。可以是一个字符串(例如,‘accuracy’,‘precision’,'recall’等),也可以是一个可调用对象,接受真实标签和预测标签,返回一个评分值。 -
cv
: 交叉验证折叠的数量,或者是一个交叉验证迭代器(例如,KFold,StratifiedKFold等)。 -
n_jobs
: 并行处理的数量,用于加速交叉验证。 -
verbose
: 控制详细程度的输出。 -
fit_params
: 传递给fit
方法的额外参数。 -
pre_dispatch
: 控制作业的预调度。 -
error_score
: 当模型在某个折叠上无法训练时,用于替代分数的值。
方法:
cross_val_score
是一个函数而不是一个类,因此没有显式的方法。
属性:
没有显式的属性。
参数应用的例子:
from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target
# 初始化模型
model = LogisticRegression()
# 使用交叉验证评估模型性能
scores = cross_val_score(model, X, y, cv=5, scoring='accuracy')
# 打印每个折叠上的分数
for fold, score in enumerate(scores, 1):
print(f"Fold {fold}: {score}")
# 打印平均分数
print(f"Mean Accuracy: {scores.mean()}")
在这个例子中,使用逻辑回归模型对鸢尾花数据集进行5折交叉验证,并输出每个折叠的准确度分数以及平均准确度。这样的输出可以帮助你更好地了解模型的性能。
这行代码使用了enumerate
函数,它接受一个可迭代对象(在这里是scores
),并返回一个元组,包含迭代的索引和对应的元素。在这个例子中,enumerate(scores, 1)
表示从1开始对scores
进行遍历。
具体地,fold
是迭代的索引(折叠的编号),score
是对应折叠的模型评分。在每次迭代中,print(f"Fold {fold}: {score}")
将输出类似于"Fold 1: 0.95"的内容,其中1是折叠的编号,0.95是对应折叠的模型评分。
这样的输出对于了解每个折叠上模型性能的表现非常有帮助,特别是在进行交叉验证时。
StratifiedKFold
作用:
StratifiedKFold
是scikit-learn库中用于分层抽样的交叉验证迭代器。它确保每个折叠中的类别比例与整个数据集中的类别比例相同。这对于处理不平衡的分类问题非常有用。
函数签名:
sklearn.model_selection.StratifiedKFold(n_splits=5, shuffle=False, random_state=None)
返回值:
StratifiedKFold
的实例,可用于生成交叉验证的折叠。
参数解释:
-
n_splits
: 折叠的数量,默认是5。 -
shuffle
: 是否在划分之前打乱数据,默认是False。如果为True,数据将在划分之前被打乱。 -
random_state
: 随机种子,用于确保可重复性。
方法:
split(X, y, groups=None)
生成训练和测试集的索引。
属性:
没有显式的属性。
参数应用的例子:
from sklearn.model_selection import StratifiedKFold
from sklearn.datasets import load_iris
# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target
# 初始化StratifiedKFold
stratified_kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
# 生成交叉验证的折叠
for fold, (train_index, test_index) in enumerate(stratified_kfold.split(X, y), 1):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
# 打印每个折叠的类别分布
unique, counts = np.unique(y_test, return_counts=True)
print(f"Fold {fold} - Test Set Class Distribution: {dict(zip(unique, counts))}")
在这个例子中,使用StratifiedKFold
对鸢尾花数据集进行5折交叉验证。split
方法返回每个折叠的训练和测试集索引,然后使用这些索引从原始数据集中获取相应的子集。最后,打印每个折叠测试集中各个类别的分布情况,以确保每个折叠都是分层的。
cross_val_predict
作用:
cross_val_predict
是scikit-learn库中用于在交叉验证的每个测试集上进行模型预测的函数。它返回每个样本的预测值,允许在交叉验证过程中获得对每个样本的稳健预测。
函数签名:
sklearn.model_selection.cross_val_predict(estimator, X, y=None, groups=None, cv=None, n_jobs=None, verbose=0, fit_params=None, pre_dispatch='2*n_jobs', method='predict')
返回值:
返回一个包含每个样本的预测值的数组。
参数解释:
-
estimator
: 要评估的模型对象。 -
X
: 特征矩阵。 -
y
: 目标变量。 -
groups
: 指定组标签以用于组交叉验证(GroupKFold等)。 -
cv
: 交叉验证折叠的数量,或者是一个交叉验证迭代器(例如,KFold,StratifiedKFold等)。 -
n_jobs
: 并行处理的数量,用于加速交叉验证。 -
verbose
: 控制详细程度的输出。 -
fit_params
: 传递给fit
方法的额外参数。 -
pre_dispatch
: 控制作业的预调度。 -
method
: 用于进行预测的方法,默认是 ‘predict’。可以是任何具有fit
和predict
方法的对象,或者是字符串 ‘predict’。还可以设置method='decision_function'
,得到metrics.decision_function的效果
方法:
cross_val_predict
函数没有显式的方法。
属性:
没有显式的属性。
参数应用的例子:
from sklearn.model_selection import cross_val_predict
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target
# 初始化模型
model = LogisticRegression()
# 使用交叉验证进行预测
y_pred = cross_val_predict(model, X, y, cv=5)
# 计算准确性
accuracy = accuracy_score(y, y_pred)
print(f"Accuracy: {accuracy}")
# 打印预测结果
print("Predictions:", y_pred)
在这个例子中,使用逻辑回归模型对鸢尾花数据集进行5折交叉验证,并使用cross_val_predict
函数获取每个样本的预测值。然后,计算了整体准确性,并打印了所有样本的预测结果。这个输出可以用于评估模型在每个样本上的性能。
sklearn.pipeline
Pipeline
sklearn.pipeline.Pipeline
是 scikit-learn 库中用于构建机器学习流水线的类。机器学习流水线可以将多个处理步骤串联起来,以便更方便地进行模型的训练和评估。
类签名:
sklearn.pipeline.Pipeline(steps, memory=None, verbose=False)
参数解释:
steps
: 一个列表,包含元组,每个元组的第一个元素是步骤的名称,第二个元素是对应的转换器或估计器。memory
: 用于缓存中间步骤输出的内存对象。verbose
: 控制是否输出详细信息,如果为 True,则输出每个步骤的执行信息。默认是 False。
属性:
named_steps
: 一个字典,包含每个步骤的名称和对应的转换器或估计器。
方法:
fit(X[, y, **fit_params])
: 逐步执行流水线中的每个步骤,对给定的数据X
进行拟合。fit_transform(X[, y, **fit_params])
: 逐步执行流水线中的每个步骤,并对给定的数据X
进行拟合和转换。transform(X[, **transform_params])
: 对给定的数据X
进行转换,仅适用于包含转换步骤的流水线。predict(X)
: 对给定的数据X
进行预测,仅适用于包含估计器步骤的流水线。predict_proba(X)
: 对给定的数据X
进行概率预测,仅适用于包含估计器步骤的流水线。score(X[, y, sample_weight])
: 计算在给定数据X
上的预测性能分数,仅适用于包含估计器步骤的流水线。
参数应用的例子:
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score
# 加载示例数据集
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.2, random_state=42)
# 构建流水线
pipeline = Pipeline([
('scaler', StandardScaler()), # 步骤1:标准化
('pca', PCA(n_components=2)), # 步骤2:降维
('classifier', RandomForestClassifier(random_state=42)) # 步骤3:随机森林分类器
])
# 逐步执行流水线中的每个步骤,并对训练数据进行拟合
pipeline.fit(X_train, y_train)
# 对测试数据进行预测
y_pred = pipeline.predict(X_test)
# 计算准确度
accuracy = accuracy_score(y_test, y_pred)
# 打印结果
print("Accuracy:", accuracy)
在这个例子中,构建了一个包含标准化、降维和分类器三个步骤的流水线。使用 fit
方法逐步执行每个步骤并对训练数据进行拟合,然后使用 predict
方法对测试数据进行预测。最后,计算了预测准确度。整个流水线的操作更为简便,尤其在处理复杂的数据处理和建模任务时。
sklearn.cluster 聚类算法
KMeans()
在 scikit-learn 中,K-means 聚类算法的实现在 sklearn.cluster
模块中,具体是 sklearn.cluster.KMeans
类。
类签名:
sklearn.cluster.KMeans(n_clusters=8, init='k-means++', n_init=10, max_iter=300, tol=0.0001, precompute_distances='auto', verbose=0, random_state=None, copy_x=True, n_jobs='deprecated', algorithm='auto')
参数解释:
n_clusters
: 簇的个数,即要将数据聚类成几个簇。默认是 8。init
: 初始化中心的方法,可选值有 ‘k-means++’、‘random’ 或一个 ndarray。默认是 ‘k-means++’,表示使用一种更聪明的初始化方式,使得初始的质心相互之间尽量远离。‘random’ 表示随机选择数据集中的数据点作为初始质心。也可以传递一个 ndarray,表示手动指定初始质心。n_init
: 进行 K-means 算法的随机初始化的次数。默认是 10。max_iter
: 最大迭代次数,每次初始化质心后运行的最大迭代次数。默认是 300。tol
: 算法收敛的阈值,当两次迭代的质心移动距离小于该值时,认为算法已经收敛。默认是 0.0001。precompute_distances
: 是否提前计算距离,可选值有 ‘auto’、True、False。默认是 ‘auto’,表示根据数据大小和簇的数量自动判断是否提前计算距离。verbose
: 控制输出的详细程度,如果大于 0,则输出每次初始化的结果。默认是 0。random_state
: 随机数生成器的种子,用于初始化质心的随机选择。默认是 None。copy_x
: 是否复制输入数据,如果为 False,则在运行算法时修改输入数据。默认是 True。n_jobs
: 并行计算的数量,用于加速计算。默认是 ‘deprecated’,表示使用默认值,即 1。新版 scikit-learn 不再支持 ‘deprecated’ 参数,建议使用n_jobs
直接设置并行计算的数量。algorithm
: K-means 算法的实现,可选值有 ‘auto’、‘full’、‘elkan’。默认是 ‘auto’,表示根据数据的大小和特性选择最优的算法。
属性:
cluster_centers_
: 各个簇的质心坐标。labels_
: 每个样本点的簇标签。inertia_
: 最终簇内距离的平方和,即每个样本点到其簇质心的距离的平方和。
方法:
-
fit(X[, y, sample_weight])
: 对输入数据 X 进行聚类。- 返回值:无。
-
fit_predict(X[, y, sample_weight])
: 对输入数据 X 进行聚类并返回每个样本点的簇标签。- 返回值:每个样本点的簇标签(numpy 数组)。
-
transform(X)
: 将输入数据 X 转换为距离各个簇质心的距离。- 返回值:每个样本点到各个簇的质心的距离(numpy 数组)。
-
predict(X)
: 对输入数据 X 进行聚类并返回每个样本点的簇标签。- 返回值:每个样本点的簇标签(numpy 数组)。
-
score(X[, y, sample_weight])
: 返回输入数据 X 的负的簇内距离的平方和。- 返回值:负的簇内距离的平方和(浮点数)。
参数应用的例子:
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
# 生成示例数据
X, y = make_blobs(n_samples=300, centers=4, random_state=42, cluster_std=0.60)
# 初始化 KMeans 模型
kmeans = KMeans(n_clusters=4, random_state=42)
# 拟合模型
kmeans.fit(X)
# 获取簇质心和簇标签
centers = kmeans.cluster_centers_
labels = kmeans.labels_
# 绘制结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis', s=50, alpha=0.7)
plt.scatter(centers[:, 0], centers[:, 1], c='red', marker='X', s=200, label='Cluster Centers')
plt.title('KMeans Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.show()
在这个例子中,使用 make_blobs
函数生成了一个包含 4 个簇的示例数据集。然后初始化 KMeans 模型,拟合模型,获取簇质心和簇标签,并绘制聚类的结果。示例中有两个特征,散点的颜色表示样本点所属的簇,红色的 ‘X’ 表示簇的质心。
KMeans()
和KNN
KMeans()
是一种聚类算法,用于将数据点分成 K 个不同的簇(或群组),使得每个数据点都属于距离最近的簇的中心。
K-Means(K均值)和K-Nearest Neighbors(K最近邻)是两种完全不同的机器学习算法,它们在任务和应用上有着不同的性质和目的。下面是它们的区别和联系:
区别:
-
任务类型:
- K-Means:K-Means 是一种无监督学习算法,主要用于聚类分析。它的目标是将数据分成 K 个不同的簇(或群组),使得每个数据点属于距离最近的簇的中心。
- K-Nearest Neighbors:K-Nearest Neighbors 是一种监督学习算法,用于分类和回归任务。它的目标是根据已知数据点的特征,预测新数据点的类别或数值输出。
-
学习方式:
- K-Means:K-Means 是一种无监督学习算法,它不需要标记的训练数据,而是通过数据点之间的相似性来自动聚类。
- K-Nearest Neighbors:K-Nearest Neighbors 是一种监督学习算法,需要使用标记的训练数据来建立模型。
-
目标:
- K-Means:K-Means 的目标是最小化簇内数据点的方差,即通过最小化簇内数据点之间的平方距离来找到簇的中心。
- K-Nearest Neighbors:K-Nearest Neighbors 的目标是根据邻居之间的距离和类别来进行分类或回归预测。
以下是 KMeans
类的主要参数和方法的详细解释:
主要参数:
-
n_clusters
(整数,默认=8):指定要形成的簇的数量 K。算法将尝试将数据点分成 K 个簇。 -
init
(字符串或数组,默认=‘k-means++’):初始化簇中心的方法。可以是以下值之一:- ‘k-means++’:使用智能初始化方法,更有可能选择远离彼此的初始中心。
- ‘random’:从数据中随机选择初始中心。
- 数组:您可以提供自己选择的初始中心。
-
n_init
(整数,默认=10):指定重新随机初始化的次数。算法将尝试不同的初始中心,以找到最优的结果。 -
max_iter
(整数,默认=300):指定迭代的最大次数,以便算法收敛到最终结果。 -
tol
(浮点数,默认=1e-4):收敛的容忍度。如果两次迭代之间的中心移动小于此值,算法将被认为已经收敛。 -
random_state
(整数或 RandomState 实例,默认=None):用于随机数生成的种子,以便可重复的结果。
主要方法:
-
fit(X)
:用输入数据X
训练 KMeans 模型。 -
fit_predict(X)
:将输入数据X
训练模型并返回每个数据点的簇标签。 -
fit_transform(X)
:训练模型并返回每个数据点到每个簇中心的距离的数组。 -
predict(X)
:预测输入数据X
中每个数据点所属的簇。
返回值:??属性吧??
-
labels_
:一个数组,包含每个数据点的簇标签,其形状与输入数据X
的形状相同。 -
cluster_centers_
:一个数组,包含每个簇的中心坐标。 -
inertia_
:簇内平方距离的总和,表示聚类的质量。较小的值表示较好的聚类。
- cluster_centers_:最终聚类中心的坐标;
- labels_:每个样本点对应的类别标签;
- inertia_:每个样本点到距离它们最近的类中心的距离平方和,即SSE;
- n_iter:实际的迭代次数;
- n_features_in_:参与聚类的特征个数;
- feature_names_in_:参与聚类的特征名称。
下面是一个使用 KMeans
的简单示例:
from sklearn.cluster import KMeans
import numpy as np
# 创建一些示例数据
X = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])
# 创建 KMeans 模型并指定要形成 2 个簇
kmeans = KMeans(n_clusters=2)
# 训练模型
kmeans.fit(X)
# 获取每个数据点的簇标签
labels = kmeans.labels_
print("簇标签:", labels)
# 获取簇中心坐标
centers = kmeans.cluster_centers_
print("簇中心:", centers)
簇标签: [0 1 0 1 1 0]
簇中心: [[2. 0.66666667]
[3. 3.33333333]]
这个示例创建了一个 KMeans
模型,将输入数据 X
分成 2 个簇,并输出了簇标签和簇中心。这是一个简单的聚类示例,但在实际应用中,KMeans
可以用于更复杂的数据集和任务。
kmeans.fit_predict(X)
fit_predict(X)
是 KMeans
类的一个方法,用于训练 KMeans 模型并返回每个输入数据点的簇标签。以下是 fit_predict()
方法的详细解释:
参数:
X
(数组或稀疏矩阵):输入数据,形状为(n_samples, n_features)
,其中n_samples
表示样本数量,n_features
表示特征数量。
返回值:
labels
:一个数组,包含每个数据点的簇标签,其形状为(n_samples,)
,即一个长度与输入数据样本数相同的一维数组。
示例:
以下是一个示例,展示了如何使用 fit_predict()
方法:
from sklearn.cluster import KMeans
import numpy as np
# 创建一些示例数据
X = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])
# 创建 KMeans 模型并指定要形成 2 个簇
kmeans = KMeans(n_clusters=2)
# 使用 fit_predict() 方法训练模型并获取簇标签
labels = kmeans.fit_predict(X)
print("簇标签:", labels)
簇标签: [0 0 0 1 1 1]
在这个示例中,fit_predict()
方法将数据 X
训练到 KMeans 模型中,并返回每个数据点的簇标签。输出结果将是一个一维数组,表示每个数据点属于哪个簇。
km.fit_predict(X)
和 kmeans.labels_
是的,km.fit_predict(X)
和 kmeans.labels_
返回的结果是一样的。两者都用于获取 KMeans 模型对输入数据 X
中每个数据点的簇标签。你可以使用任一方法来获得相同的结果,根据个人偏好选择使用哪种方式。下面是一个示例,展示了两种方法的等效性:
from sklearn.cluster import KMeans
import numpy as np
# 创建一些示例数据
X = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])
# 创建 KMeans 模型并指定要形成 2 个簇
kmeans = KMeans(n_clusters=2)
# 使用 fit_predict() 方法训练模型并获取簇标签
labels_fit_predict = kmeans.fit_predict(X)
# 使用 labels_ 属性获取簇标签
kmeans.fit(X)
labels_labels_ = kmeans.labels_
# 检查两种方法的结果是否相同
print("使用 fit_predict() 方法得到的簇标签:", labels_fit_predict)
print("使用 labels_ 属性得到的簇标签:", labels_labels_)
# 检查两者是否相等
print("两种方法的结果是否相等:", np.array_equal(labels_fit_predict, labels_labels_))
这个示例中,首先使用 fit_predict()
方法和 labels_
属性分别获取了簇标签,并通过 np.array_equal()
函数检查它们是否相等,结果是相等的。因此,两者是等效的。
kmeans.predict
和 kmeans.fit_predict
kmeans.predict
和 kmeans.fit_predict
都是 K-Means 聚类算法中的方法,但它们在用法上有一些区别:
kmeans.predict
方法:- 用法:
kmeans.predict(X)
,其中X
是输入的数据集。 - 返回值:一个一维数组,表示输入数据集中每个样本所属的聚类簇的标签。
- 使用场景:通常在已经训练好 K-Means 模型之后,用来预测新的数据点所属的聚类簇。
- 用法:
示例代码:
from sklearn.cluster import KMeans
# 创建并训练 K-Means 模型
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
# 预测新的数据点所属的聚类簇
new_data = [[4.0, 5.0]]
predicted_label = kmeans.predict(new_data)
print("预测的簇标签:", predicted_label)
kmeans.fit_predict
方法:- 用法:
kmeans.fit_predict(X)
,其中X
是输入的数据集。 - 返回值:一个一维数组,表示输入数据集中每个样本所属的聚类簇的标签。
- 使用场景:通常在训练 K-Means 模型并且同时获取样本的聚类标签时使用。
- 用法:
示例代码:
from sklearn.cluster import KMeans
# 创建并训练 K-Means 模型,并同时获取样本的聚类标签
kmeans = KMeans(n_clusters=3)
labels = kmeans.fit_predict(X)
print("样本的聚类标签:", labels)
总结:
kmeans.predict
主要用于预测新的数据点所属的聚类簇,它需要已经训练好的 K-Means 模型。kmeans.fit_predict
用于训练 K-Means 模型并获取样本的聚类标签,它在一次操作中完成了训练和预测的过程。
轮廓系数(Silhouette Coefficient)
sklearn.metrics.silhouette_score
sklearn.metrics.silhouette_score
用于计算聚类结果的轮廓系数(Silhouette Coefficient),它衡量了每个样本点与其同簇内的其他样本点相似度与其与最近其他簇的样本点相似度之间的差异程度。轮廓系数的取值范围在 [-1, 1],越接近 1 表示聚类效果越好。
轮廓系数(Silhouette Coefficient)是一种用于评估聚类质量的指标,它可以用来衡量数据点与其所属簇(类别)的相似度以及与其他簇的不相似度。轮廓系数的取值范围在 -1 到 1 之间,具体解释如下:
- 如果轮廓系数接近1,表示样本与自己的簇相似,且与其他簇不相似,说明聚类结果良好。
- 如果轮廓系数接近0,表示样本与自己的簇相似和与其他簇相似,说明样本处于两个簇的边界附近。
- 如果轮廓系数接近-1,表示样本与自己的簇不相似,且与其他簇相似,说明样本被错误地分配到了相反的簇中。
轮廓系数的计算方式如下:
- 对于每个数据点 i i i,计算与同簇中其他数据点的平均距离 a ( i ) a(i) a(i),表示簇内的紧密度。
- 对于数据点 i i i 和不同簇中的所有其他簇,计算与该簇中所有数据点的平均距离,然后选择最小的这个平均距离,表示样本与其他簇的分离度,记作 b ( i ) b(i) b(i)。
- 计算数据点 i i i 的轮廓系数 s ( i ) s(i) s(i),公式为: s ( i ) = b ( i ) − a ( i ) max ( a ( i ) , b ( i ) ) s(i) = \frac{b(i) - a(i)}{\max(a(i), b(i))} s(i)=max(a(i),b(i))b(i)−a(i)。
最终,通过计算所有数据点的轮廓系数并求取平均值,可以得到整个聚类的轮廓系数。
轮廓系数越接近1,表示聚类效果越好;越接近-1,表示聚类效果越差。轮廓系数可以帮助选择合适的聚类数目,并评估聚类算法的性能。
函数签名:
sklearn.metrics.silhouette_score(X, labels, metric='euclidean', sample_size=None, random_state=None, **kwds)
参数解释:
X
: 特征矩阵,形状为 (n_samples, n_features)。labels
: 每个样本点的簇标签,形状为 (n_samples,)。metric
: 距离度量的方法,可以是字符串(如 ‘euclidean’)或可调用对象。默认是 ‘euclidean’。sample_size
: 用于计算 Silhouette Coefficient 的样本子集大小,如果为 None,则使用整个数据集。默认是 None。random_state
: 随机数生成器的种子,用于初始化样本子集的随机选择。默认是 None。**kwds
: 其他可选关键字参数,用于传递给距离度量的函数。
返回值:
silhouette_score
: 一个表示整个数据集聚类效果的分数,取值范围在 -1 到 1 之间。分数越高,表示聚类效果越好。如果分数接近于 1,表示簇内数据点距离越近,簇间数据点距离越远,聚类效果最佳;如果分数接近于 -1,表示聚类效果很差,数据点更可能被分到了错误的簇;如果分数接近于 0,则表示数据点处于两个簇的边界。
方法:
- 无
示例:
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import matplotlib.pyplot as plt
# 生成示例数据
X, y = make_blobs(n_samples=300, centers=4, random_state=42, cluster_std=0.60)
# 尝试不同的簇数并计算轮廓系数
for n_clusters in range(2, 6):
kmeans = KMeans(n_clusters=n_clusters, random_state=42)
labels = kmeans.fit_predict(X)
silhouette_avg = silhouette_score(X, labels)
print(f"For n_clusters={n_clusters}, the silhouette score is {silhouette_avg}")
# 绘制聚类结果
kmeans = KMeans(n_clusters=4, random_state=42)
labels = kmeans.fit_predict(X)
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis', s=50, alpha=0.7)
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], c='red', marker='X', s=200, label='Cluster Centers')
plt.title('KMeans Clustering with Silhouette Score')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.show()
在这个示例中,通过使用 make_blobs
函数生成一个包含 4 个簇的示例数据集,然后尝试不同的簇数,计算每个簇数下的轮廓系数。最后绘制了 KMeans 聚类的结果,并在图中显示了簇的质心。
DBSCAN()
sklearn.cluster.DBSCAN()
是 scikit-learn 库中用于执行基于密度的空间聚类(Density-Based Spatial Clustering of Applications with Noise,DBSCAN)的函数。DBSCAN 是一种能够发现具有相对高密度的样本群集的聚类算法,它能够识别离群点(噪声)。该算法不需要预先指定群集的数量,并能够识别任意形状的群集。
以下是 DBSCAN()
函数的基本信息:
函数签名:
sklearn.cluster.DBSCAN(eps=0.5, min_samples=5, metric='euclidean', metric_params=None, algorithm='auto', leaf_size=30, p=None, n_jobs=None)
参数解释:
eps
: 邻域半径,指定样本之间的最大距离,超过这个距离的样本不属于同一个群集。默认为 0.5。min_samples
: 定义一个核心样本所需的邻域内的最小样本数。默认为 5。metric
: 用于计算距离的度量标准,可以是字符串(如 ‘euclidean’、‘manhattan’)或可调用对象。默认为 ‘euclidean’。metric_params
: 传递给度量函数的其他参数。algorithm
: 用于计算最近邻的算法,可选值包括 ‘auto’、‘ball_tree’、‘kd_tree’ 和 ‘brute’。默认为 ‘auto’。leaf_size
: 用于 BallTree 或 KDTree 的叶子大小。默认为 30。p
: 用于 Minkowski 距离的幂参数。如果metric
不是 ‘minkowski’,则忽略。默认为 None。n_jobs
: 用于计算最近邻的并行运算的数量。默认为 None,表示不使用并行运算。
返回值:
返回一个数组,其中包含每个样本的标签,标签为正整数表示所属群集,标签为 -1 表示离群点。
属性:
components_
: 一个数组,形状为(n_samples, n_features)
,包含被认为是核心样本的样本。core_sample_indices_
: 一个数组,包含核心样本的索引。labels_
: 一个数组,形状为(n_samples,)
,包含每个样本的标签。
方法:
fit(X)
: 拟合数据,执行 DBSCAN 算法。fit_predict(X)
: 拟合数据并返回每个样本的标签。fit_transform(X)
: 拟合数据并返回距离矩阵的负平方根,用于聚类。get_params()
: 获取模型的参数。set_params(**params)
: 设置模型的参数。
请注意,components_
和 core_sample_indices_
属性仅在使用 fit
方法后才会被填充,而 labels_
属性则在使用 fit
或 fit_predict
方法后被填充。
应用例子:
from sklearn.cluster import DBSCAN
import numpy as np
# 例子:生成一个示例数据集并应用 DBSCAN 算法
np.random.seed(42)
X = np.random.rand(100, 2) # 生成一个包含 100 个样本的二维数据集
# 创建 DBSCAN 对象并拟合数据
dbscan = DBSCAN(eps=0.3, min_samples=5)
labels = dbscan.fit_predict(X)
# 打印结果
print("Example:")
print("Labels:", labels)
打印结果:
Example:
Labels: [ 0 1 0 2 -1 2 0 -1 -1 1 2 2 2 1 0 0 2 1 0 -1 1 0 0 1
1 2 2 2 1 0 -1 -1 -1 0 2 -1 1 0 2 2 -1 0 1 1 2 1 2 1 1
-1 -1 1 1 -1 0 0 1 -1 0 -1 1 -1 1 -1 1 0 1 2 2 0 2 0 -1 2
0 1 2 -1 -1 0 2 2 2 -1 -1 1 2 -1 2 0 1 1 0 -1 0 1 1 -1 2
-1 2 -1 2]
在这个例子中,DBSCAN()
算法被用于对一个随机生成的二维数据集进行聚类。结果中,标签为正整数表示所属的群集,标签为 -1 表示离群点。
分类器
分类器是一种机器学习模型或算法,用于将数据点分为不同的类别或标签。它是监督学习任务的一部分,其中模型通过学习从已知数据点到相应类别的映射来进行分类。分类器的主要目的是根据输入特征对未知数据点进行自动分类,以便进行决策、预测或识别。
以下是分类器的主要目的和应用领域:
-
分类问题解决:分类器用于解决分类问题,其中每个数据点都被分配到预定义的类别或标签中的一个。例如,将垃圾邮件和正常邮件进行分类,将数字图像中的手写数字识别为0到9之一。
-
模式识别:在模式识别中,分类器用于识别数据中的特定模式或特征,以进行模式匹配或模式识别。这在计算机视觉、语音识别和自然语言处理等领域中非常常见。
-
决策支持:分类器可用于辅助决策制定。例如,在医学诊断中,可以使用分类器来帮助医生识别疾病或预测患者的风险。
-
预测:分类器可以用于预测未来事件或结果。例如,根据用户的购买历史,可以使用分类器来预测用户是否会购买特定产品。
-
异常检测:分类器还可用于检测异常或离群点。这在安全领域、金融领域和制造业中非常重要。
-
自动化任务:分类器在自动化任务中发挥关键作用,例如自动化文本分类、图像分类、语音识别和机器人控制。
不同的分类器算法有不同的特性和适用性,包括决策树、支持向量机、朴素贝叶斯、随机森林、神经网络等。选择合适的分类器取决于数据的性质和任务的要求。分类器的性能通常通过准确性、召回率、精确度、F1 分数等指标来评估。
KNeighborsClassifier()
K近邻
from sklearn.neighbors import KNeighborsClassifier
KNeighborsClassifier
是 scikit-learn 中的一个机器学习模型,用于执行 K 近邻分类任务。K 近邻分类是一种基于实例的监督学习方法,它通过查找最接近输入数据点的训练样本来进行分类。
函数签名:
KNeighborsClassifier(n_neighbors=5, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None, **kwargs)
KNeighborsClassifier()
参数的解释:
-
n_neighbors
(可选参数,默认值为 5):指定要考虑的最近邻居的数量(K 值)。通常需要根据问题的性质选择合适的 K 值。较小的 K 值会使模型对噪声更敏感,而较大的 K 值可能会使决策边界更平滑。基本只用这个 -
weights
(可选参数,默认值为 ‘uniform’):指定在进行分类时如何对最近邻居的权重进行加权。可选值包括:'uniform'
:所有最近邻居的权重相等,即简单投票。'distance'
:最近邻居的权重与其距离的倒数成正比,距离越近的点权重越高。- 自定义函数:可以传入一个自定义的权重计算函数,该函数接受距离数组作为输入并返回权重数组。
-
algorithm
(可选参数,默认值为 ‘auto’):指定用于计算最近邻居的算法。可选值包括:'auto'
:根据数据和其他参数自动选择适当的算法。'ball_tree'
:使用 Ball 树算法。'kd_tree'
:使用 KD 树算法。'brute'
:使用暴力搜索,适用于较小的数据集。
-
p
(可选参数,默认值为 2):用于 Minkowski 距离的指数参数。当p = 1
时,使用曼哈顿距离(L1 距离),当p = 2
时,使用欧几里德距离(L2 距离)。 -
metric
(可选参数,默认值为 ‘minkowski’):用于计算距离的度量标准。通常无需指定,因为默认值适用于大多数情况。常见的度量标准包括:'euclidean'
:欧几里德距离。'manhattan'
:曼哈顿距离。- 自定义距离函数:可以传入自定义的距离函数。
-
n_jobs
(可选参数,默认值为 1):指定并行计算的作业数。如果设置为 -1,则使用所有可用的 CPU 核心进行并行计算。 -
其他参数:还有一些其他参数,如
leaf_size
、metric_params
等,可以用于进一步定制和优化模型。
当使用 KNeighborsClassifier
时,有一些常用的方法和属性,它们用于训练、预测和评估模型。下面分别讲解这些方法和属性的详细信息:
方法 (Methods):
-
.fit(X, y)
: 用于训练模型。X
是训练数据的特征矩阵,y
是对应的标签向量。示例:knn.fit(X_train, y_train)
-
.predict(X)
: 用于进行预测。给定输入数据X
,它返回一个包含预测标签的数组。示例:y_pred = knn.predict(X_test)
-
.predict_proba(X)
: 对于多类别分类问题,返回每个样本属于每个类别的概率矩阵。示例:prob_matrix = knn.predict_proba(X_test)
-
.kneighbors(X, n_neighbors, return_distance)
: 返回每个样本的最近邻居的索引和可选的距离。n_neighbors
指定要返回的最近邻居的数量,return_distance
控制是否返回距离信息。示例:indices, distances = knn.kneighbors(X_test, n_neighbors=3, return_distance=True)
属性 (Attributes):
-
.classes_
: 训练过的模型的类别标签。这是一个数组,包含了模型所能预测的所有可能类别。示例:classes = knn.classes_
-
.n_neighbors
: 模型在训练过程中使用的最近邻居的数量。示例:n_neighbors = knn.n_neighbors
-
.effective_metric_
: 模型使用的度量标准。这是一个字符串,表示模型在训练和预测中使用的距离度量。示例:metric = knn.effective_metric_
-
.outputs_2d_
: 指示模型是否为二维输出的布尔值。如果为True
,则表示模型为多类别问题,输出为二维数组。如果为False
,则表示模型为二分类问题,输出为一维数组。示例:is_2d_output = knn.outputs_2d_
示例及其应用:
下面是一个示例,演示了如何使用 KNeighborsClassifier
进行分类任务:
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载鸢尾花数据集
data = load_iris()
X, y = data.data, data.target
# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 创建 K 近邻分类器
knn_classifier = KNeighborsClassifier(n_neighbors=3)
# 在训练集上拟合模型
knn_classifier.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = knn_classifier.predict(X_test)
# 计算分类准确度
accuracy = accuracy_score(y_test, y_pred)
print(f"分类准确度:{accuracy}")
在这个示例中,我们首先加载了鸢尾花数据集,然后将数据集拆分为训练集和测试集。接下来,我们创建了一个 KNeighborsClassifier
模型,将 n_neighbors
参数设置为 3,并在训练集上拟合了模型。最后,我们使用模型对测试集进行预测,并计算了分类准确度。
KNeighborsClassifier.kneighbors()
KNeighborsClassifier.kneighbors()
方法用于查找输入数据点的 k 个最近邻居,以及与这些最近邻居的距离。以下是关于 KNeighborsClassifier.kneighbors()
方法的详细解释以及常用参数的示例:
KNeighborsClassifier.kneighbors()
参数的解释:
-
X
(必需参数):包含输入数据点的特征的数组,形状为(n_samples, n_features)
,其中n_samples
是样本数,n_features
是特征数。 -
n_neighbors
(可选参数,默认值为 5):指定要查找的最近邻居的数量(K 值)。通常需要根据问题的性质选择合适的 K 值。 -
return_distance
(可选参数,默认值为 True):如果为 True,则返回最近邻居的距离。如果为 False,则仅返回最近邻居的索引。
KNeighborsClassifier.kneighbors
方法返回一个元组,其中包含两个 NumPy 数组:
-
第一个数组包含了查询点的 k 个最近邻居在训练数据集中的索引。这些索引对应于训练数据集中的样本。
-
第二个数组包含了查询点与其 k 个最近邻居之间的距离。这些距离的顺序与第一个数组中的索引对应。
具体来说,返回值的格式如下:
(indices, distances)
-
indices
是一个形状为(1, k)
的 NumPy 数组,其中存储了 k 个最近邻居在训练数据集中的索引。如果有多个查询点,那么这个数组的维度将是(n_queries, k)
,其中n_queries
是查询点的数量。 -
distances
是一个形状为(1, k)
的 NumPy 数组,其中存储了查询点与其 k 个最近邻居之间的距离。如果有多个查询点,那么这个数组的维度将是(n_queries, k)
。
这些返回值允许你获得查询点的最近邻居的索引和距离信息,从而进行后续的分析或决策。
示例及其应用:
以下是一个示例,演示了如何使用 KNeighborsClassifier.kneighbors()
方法查找输入数据点的最近邻居和距离:
np.array([[5.1, 3.5, 1.4, 0.2]])
是一个 NumPy 数组,其中包含一个嵌套的列表。这种嵌套的结构用于表示数据点的特征,其中外部的一对方括号表示数组的维度,内部的一对方括号表示一个列表。在这个示例中,这个数组表示一个数据点,该数据点具有四个特征。
为什么要使用两层方括号呢?这是因为在 NumPy 中,每对方括号表示一个新的维度。如果只使用一层方括号,例如
np.array([5.1, 3.5, 1.4, 0.2])
,那么它将被解释为一维数组,而不是二维数组。为了确保我们创建的是一个二维数组,我们使用了两层方括号。
在机器学习中,通常会将输入数据表示为二维数组,其中每行表示一个数据点,每列表示一个特征。这种表示方式使得处理多个数据点变得更加方便。
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
import numpy as np
# 加载鸢尾花数据集
data = load_iris()
X, y = data.data, data.target
# 创建 K 近邻分类器
knn_classifier = KNeighborsClassifier(n_neighbors=3)
# 在训练集上拟合模型
knn_classifier.fit(X, y)
# 输入数据点
new_data_point = np.array([[5.1, 3.5, 1.4, 0.2]]) # 以鸢尾花数据集特征为例
# 查找最近邻居和距离
distances, neighbors_indices = knn_classifier.kneighbors(new_data_point, n_neighbors=3)
# 输出最近邻居的索引
print("最近邻居的索引:", neighbors_indices)
# 输出最近邻居的距离
print("最近邻居的距离:", distances)
最近邻居的索引: [[ 0 17 4]]
最近邻居的距离: [[0. 0.1 0.14142136]]
在这个示例中,我们首先创建了一个 KNeighborsClassifier
模型并拟合了模型。然后,我们定义了一个新的数据点 new_data_point
,并使用 knn_classifier.kneighbors()
方法查找了最近的 3 个邻居和它们的距离。neighbors_indices
存储了最近邻居的索引,distances
存储了最近邻居的距离。
寻找最佳K值
“K 折交叉验证”(K-Fold Cross-Validation)
“K 折交叉验证”(K-Fold Cross-Validation)是一种用于评估机器学习模型性能的技术。它的目的是在有限的数据样本集上对模型进行验证,以评估模型在未见过的数据上的性能。
K 折交叉验证的步骤如下:
-
将数据集分成 K 个互不重叠的子集,每个子集称为一个 “折”(Fold)。
-
选择一个折作为验证集,剩下的 K-1 个折作为训练集。
-
使用训练集来训练模型,并使用验证集来评估模型的性能。通常,评估指标如准确性、均方误差等会在此步骤中计算。
-
重复步骤 2 和 3,每次选择不同的验证集,直到每个折都被用作验证集一次。
-
对 K 次验证的结果进行平均,以获得最终的性能评估。
K 折交叉验证的优点包括:
- 可以更充分地利用有限的数据,减少模型评估的方差。
- 允许多次模型训练和验证,提供了更稳健的性能评估。
- 可以检测模型的过拟合问题,因为模型在不同的验证集上进行了测试。
常用的 K 值通常为 5 或 10,但根据数据集的大小和复杂性,也可以选择其他值。 K 折交叉验证是机器学习中常用的模型评估技术之一,有助于更好地了解模型的泛化性能。
cross_val_score()
from sklearn.model_selection import cross_val_score
cross_val_score
是 Scikit-Learn 中用于交叉验证的函数。它的作用是对一个模型进行 K 折交叉验证并返回每个验证分割的性能评估结果。以下是关于 cross_val_score
函数的详细解释以及常用参数的示例:
cross_val_score
函数的解释:
cross_val_score(estimator, X, y=None, cv=None, scoring=None, n_jobs=None, verbose=0, fit_params=None, pre_dispatch='2*n_jobs', error_score=nan)
-
estimator
(必需参数):要评估的机器学习模型,例如分类器或回归器。 -
X
(必需参数):特征矩阵,包含所有训练样本的特征数据。 -
y
(可选参数,默认值为 None):目标值或标签,包含与特征数据对应的真实标签。对于无监督学习任务,可以将其设置为 None。 -
cv
(Cross-Validation,交叉验证)(可选参数,默认值为 5):交叉验证的策略。可以是一个整数,代表 K 折交叉验证的折数,也可以是一个交叉验证生成器的对象。常见的取值包括整数、KFold 对象或 StratifiedKFold 对象。 -
scoring
(可选参数,默认值为 None):性能评估指标的字符串(或可调用的对象)。如果不指定,则使用模型的默认评估指标。 -
n_jobs
(可选参数,默认值为 None):并行计算的数量。如果设置为 -1,则使用所有可用的 CPU 核心。如果设置为 1,则不使用并行计算。 -
verbose
(可选参数,默认值为 0):控制详细程度的整数。如果大于 0,则会显示详细的日志信息。 -
fit_params
(可选参数,默认值为 None):传递给estimator.fit()
方法的参数,可以用于控制模型的拟合过程。 -
pre_dispatch
(可选参数,默认值为 ‘2*n_jobs’):并行执行时任务的数量,用于控制任务的调度。 -
error_score
(可选参数,默认值为 ‘nan’):当模型无法拟合时的分数。通常情况下,它被设置为 ‘nan’,表示将不会返回任何分数。但也可以设置为一个数字。
示例及其应用:
以下是一个示例,演示了如何使用 cross_val_score
函数进行 K 折交叉验证并计算模型的性能评估分数:
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
# 加载鸢尾花数据集
data = load_iris()
X, y = data.data, data.target
# 创建决策树分类器
clf = DecisionTreeClassifier()
# 使用 5 折交叉验证计算分类器的准确性
scores = cross_val_score(clf, X, y, cv=5)
# 输出每折交叉验证的准确性分数
print("每折交叉验证的准确性分数:", scores)
# 输出平均准确性分数
print("平均准确性分数:", scores.mean())
在这个示例中,我们加载了鸢尾花数据集,创建了一个决策树分类器 clf
。然后,我们使用 cross_val_score
函数对 clf
模型进行了 5 折交叉验证,并计算了每折交叉验证的准确性分数。最后,我们输出了每折交叉验证的分数以及平均分数。
cross_val_score
函数的返回值
cross_val_score
函数的返回值是一个包含多次交叉验证评估结果的数组(或列表),其中每个元素对应于一次交叉验证的评估分数。具体来说,返回值是一个 NumPy 数组,其中包含了每个验证折的性能指标值(例如准确性、均方误差等)。
这个数组的长度通常等于交叉验证的折数(由 cv
参数决定),每个元素对应于一次交叉验证的评估结果。你可以根据需要使用这些评估结果来分析模型的性能,例如计算平均值、标准差等统计信息,或者直接查看每次交叉验证的性能表现。
以下是一个示例代码,演示如何使用 cross_val_score
并查看其返回值:
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
# 创建一个决策树分类器
clf = DecisionTreeClassifier()
# 使用交叉验证评估模型性能,cv=5 表示使用 5 折交叉验证
scores = cross_val_score(clf, X, y, cv=5)
# 打印每次交叉验证的评估结果
print("每次交叉验证的评估分数:", scores)
# 打印平均分数和标准差
print("平均分数:", scores.mean())
print("标准差:", scores.std())
每次交叉验证的评估分数: [0.96666667 0.96666667 0.9 0.96666667 1. ]
平均分数: 0.9600000000000002
标准差: 0.03265986323710903
在这个示例中,scores
是一个包含 5 次交叉验证评估结果的数组,你可以根据需要对这些评估结果进行进一步的分析。
GaussianNB()
GaussianNB
是 Scikit-Learn 中用于实现高斯朴素贝叶斯分类器的类。高斯朴素贝叶斯是一种基于贝叶斯定理的分类方法,通常用于处理连续型特征的分类问题。下面是关于 GaussianNB
的详细解释:
作用:
GaussianNB
用于训练高斯朴素贝叶斯分类器,该分类器用于处理连续型特征数据,并在给定特征值的情况下估计每个类别的概率。
返回值:
GaussianNB
的对象,拟合了训练数据后可以用于进行预测。
参数:
GaussianNB
类没有太多可调整的参数,因为它是一个相对简单的分类器,它的构造函数接受以下参数:
- 无参数:
priors
: 先验概率。这是一个可选的参数,允许你手动指定每个类别的先验概率。默认情况下,先验概率将从训练数据中估计得出。
方法:
GaussianNB
类提供了一些方法,其中最重要的是:
-
fit(X, y)
:- 用于拟合高斯朴素贝叶斯分类器到训练数据。
X
是训练数据的特征,y
是对应的目标标签。
- 用于拟合高斯朴素贝叶斯分类器到训练数据。
-
predict(X)
:- 用于对新的数据进行分类。给定输入特征
X
,返回预测的类别标签。
- 用于对新的数据进行分类。给定输入特征
-
predict_proba(X)
:- 用于返回每个类别的概率估计。给定输入特征
X
,返回一个二维数组,其中每行代表一个样本,每列代表一个类别,值是样本属于每个类别的概率估计。
- 用于返回每个类别的概率估计。给定输入特征
-
.score()
应该也有吧
示例:
下面是一个简单的示例,演示如何使用 GaussianNB
进行分类:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
# 加载鸢尾花数据集
data = load_iris()
X = data.data
y = data.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 创建高斯朴素贝叶斯分类器
gnb = GaussianNB()
# 拟合模型到训练数据
gnb.fit(X_train, y_train)
# 进行预测
y_pred = gnb.predict(X_test)
# 输出预测结果
print("预测结果:", y_pred)
在这个示例中,我们首先加载了鸢尾花数据集,然后将数据分成训练集和测试集。接下来,创建了一个 GaussianNB
对象并拟合到训练数据中,最后使用模型进行预测并输出预测结果。
DecisionTreeClassifier()
DecisionTreeClassifier
是 Scikit-Learn 中用于实现决策树分类器的类。决策树是一种常见的监督学习算法,用于分类问题。下面是关于 DecisionTreeClassifier
的详细解释:
作用:
DecisionTreeClassifier
用于构建和训练决策树模型,该模型根据输入特征对样本进行分类,并在每个节点上选择一个特征以分割数据。
返回值:
DecisionTreeClassifier
的对象,拟合了训练数据后可以用于进行预测。
参数:
DecisionTreeClassifier
类的构造函数接受多个参数,以下是一些常用的参数:
-
criterion
(默认值为 “gini”):- 衡量分裂质量的标准。可以选择 “gini”(Gini 不纯度)或 “entropy”(信息增益)。
- “gini” 通常用于默认情况,它衡量了分类的错误率。
- “entropy” 衡量了信息增益,它通常在决策树中用于选择特征的分裂点。
-
splitter
(默认值为 “best”):- 用于选择每个节点上的分裂策略。可以选择 “best”(最佳分裂点)或 “random”(随机分裂点)。
- “best” 会选择最优的分裂点,而 “random” 会随机选择一个特征进行分裂。
-
max_depth
(默认值为None
):- 决策树的最大深度。如果不设置或设置为
None
,则树会一直生长,直到每个叶节点都包含少于min_samples_split
个样本或不再分裂为止。
- 决策树的最大深度。如果不设置或设置为
-
min_samples_split
(默认值为 2):- 内部节点分裂所需的最小样本数。如果一个节点的样本数量小于
min_samples_split
,则不会再分裂。
- 内部节点分裂所需的最小样本数。如果一个节点的样本数量小于
-
min_samples_leaf
(默认值为 1):- 叶节点所需的最小样本数。如果叶节点的样本数量小于
min_samples_leaf
,则不会再分裂。
- 叶节点所需的最小样本数。如果叶节点的样本数量小于
-
max_features
(默认值为None
):- 每个节点评估的特征数的最大数量。可以是整数(表示数量)或浮点数(表示百分比)。
- 如果设置为 “sqrt”,则最大特征数为特征总数的平方根。
-
class_weight
(默认值为None
):- 类别权重。可以用于解决类别不平衡的问题。
- 如果设置为 “balanced”,模型会自动计算类别权重,使得不同类别的样本在分裂时具有相同的权重。
-
其他参数如
random_state
、min_impurity_decrease
、min_impurity_split
等。
方法:
DecisionTreeClassifier
类提供了一些方法,其中最重要的是:
-
fit(X, y)
:- 用于拟合决策树模型到训练数据。
X
是训练数据的特征,y
是对应的目标标签。
- 用于拟合决策树模型到训练数据。
-
predict(X)
:- 用于对新的数据进行分类。给定输入特征
X
,返回预测的类别标签。
- 用于对新的数据进行分类。给定输入特征
-
predict_proba(X)
:- 用于返回每个类别的概率估计。给定输入特征
X
,返回一个二维数组,其中每行代表一个样本,每列代表一个类别,值是样本属于每个类别的概率估计。
- 用于返回每个类别的概率估计。给定输入特征
-
.score()
应该也有吧?
示例:
下面是一个简单的示例,演示如何使用 DecisionTreeClassifier
进行分类:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
# 加载鸢尾花数据集
data = load_iris()
X = data.data
y = data.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 创建决策树分类器
dt_classifier = DecisionTreeClassifier()
# 拟合模型到训练数据
dt_classifier.fit(X_train, y_train)
# 进行预测
y_pred = dt_classifier.predict(X_test)
# 输出预测结果
print("预测结果:", y_pred)
在这个示例中,我们首
先加载了鸢尾花数据集,然后将数据分成训练集和测试集。接下来,创建了一个 DecisionTreeClassifier
对象并拟合到训练数据中,最后使用模型进行预测并输出预测结果。
RandomForestClassifier()
RandomForestClassifier
是 Scikit-Learn 中用于实现随机森林分类器的类。随机森林是一种集成学习方法,它由多个决策树组成,用于解决分类问题。下面是关于 RandomForestClassifier
的详细解释:
作用:
RandomForestClassifier
用于构建和训练随机森林模型,该模型由多个决策树组成,并使用投票或平均方法对它们的预测进行整合。
返回值:
RandomForestClassifier
的对象,拟合了训练数据后可以用于进行预测。
参数:
RandomForestClassifier
类的构造函数接受多个参数,以下是一些常用的参数:
-
n_estimators
(默认值为 100):- 随机森林中决策树的数量。
-
criterion
(默认值为 “gini”):- 决策树的分裂标准。可以选择 “gini”(Gini 不纯度)或 “entropy”(信息增益)。
-
max_depth
(默认值为None
):- 决策树的最大深度。如果不设置或设置为
None
,则树会一直生长,直到每个叶节点都包含少于min_samples_split
个样本或不再分裂为止。
- 决策树的最大深度。如果不设置或设置为
-
min_samples_split
(默认值为 2):- 内部节点分裂所需的最小样本数。如果一个节点的样本数量小于
min_samples_split
,则不会再分裂。
- 内部节点分裂所需的最小样本数。如果一个节点的样本数量小于
-
min_samples_leaf
(默认值为 1):- 叶节点所需的最小样本数。如果叶节点的样本数量小于
min_samples_leaf
,则不会再分裂。
- 叶节点所需的最小样本数。如果叶节点的样本数量小于
-
max_features
(默认值为 “auto”):- 每个节点评估的特征数的最大数量。可以是整数(表示数量)或浮点数(表示百分比)。
- 如果设置为 “auto”,则最大特征数将是特征总数的平方根。
-
bootstrap
(默认值为True
):- 是否进行自助采样(Bootstrap sampling)。如果设置为
True
,则每棵决策树的训练数据都是通过有放回抽样生成的,这可以增加模型的多样性。
- 是否进行自助采样(Bootstrap sampling)。如果设置为
-
oob_score
(默认值为False
):- 是否计算袋外(Out-of-Bag)分数。如果设置为
True
,则模型会使用未在每棵树的训练中使用的样本来计算袋外分数。
- 是否计算袋外(Out-of-Bag)分数。如果设置为
-
class_weight
(默认值为None
):- 类别权重。可以用于解决类别不平衡的问题。
- 如果设置为 “balanced”,模型会自动计算类别权重,使得不同类别的样本在训练中具有相同的权重。
方法:
RandomForestClassifier
类提供了一些方法,其中最重要的是:
-
fit(X, y)
:- 用于拟合随机森林模型到训练数据。
X
是训练数据的特征,y
是对应的目标标签。
- 用于拟合随机森林模型到训练数据。
-
predict(X)
:- 用于对新的数据进行分类。给定输入特征
X
,返回预测的类别标签。
- 用于对新的数据进行分类。给定输入特征
-
predict_proba(X)
:- 用于返回每个类别的概率估计。给定输入特征
X
,返回一个二维数组,其中每行代表一个样本,每列代表一个类别,值是样本属于每个类别的概率估计。
- 用于返回每个类别的概率估计。给定输入特征
-
.score()
RandomForestClassifier
中的.score
方法用于评估模型在给定数据上的性能,并返回一个准确性分数。
方法签名:
score(X, y, sample_weight=None)
参数:
X
(array-like, shape (n_samples, n_features)): 要评估模型性能的输入数据。y
(array-like, shape (n_samples,)): 数据的真实标签。sample_weight
(array-like, shape (n_samples,), optional): 用于赋予不同样本不同权重的可选权重数组。默认情况下,所有样本的权重相等。
返回值:
score
方法返回一个浮点数,表示模型在输入数据上的准确性分数。分数的取值范围通常在0到1之间,1表示完美预测,0表示最差的预测。
示例:
下面是一个简单的示例,演示如何使用 RandomForestClassifier
进行分类:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
# 加载鸢尾花数据集
data = load_
iris()
X = data.data
y = data.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 创建随机森林分类器
rf_classifier = RandomForestClassifier(n_estimators=100)
# 拟合模型到训练数据
rf_classifier.fit(X_train, y_train)
# 进行预测
y_pred = rf_classifier.predict(X_test)
# 输出预测结果
print("预测结果:", y_pred)
# 使用 .score 方法评估模型性能
accuracy = rf_classifier.score(X_test, y_test)
print("Accuracy:", accuracy)
在这个示例中,我们首先加载了鸢尾花数据集,然后将数据分成训练集和测试集。接下来,创建了一个 RandomForestClassifier
对象并拟合到训练数据中,最后使用模型进行预测并输出预测结果。
sklearn.metrics
mean_squared_error 均方误差
sklearn.metrics.mean_squared_error
是 scikit-learn 库中用于计算均方误差(Mean Squared Error,MSE)的函数。均方误差是一种用于度量回归模型预测结果与实际观测值之间差异的指标。
函数签名:
sklearn.metrics.mean_squared_error(y_true, y_pred, sample_weight=None, multioutput='uniform_average', squared=True)
返回值:
返回一个浮点数,表示均方误差。
参数解释:
y_true
: 真实的目标值。y_pred
: 模型的预测值。sample_weight
: 样本权重,可选参数,默认为 None。multioutput
: 定义多输出问题的计算方式。可选值有 ‘raw_values’、‘uniform_average’、‘variance_weighted’,默认是 ‘uniform_average’。squared
: 如果为 True,返回的是均方误差;如果为 False,返回的是均绝对误差(Mean Absolute Error,MAE)。
方法:
没有显式的方法。
示例和打印结果:
from sklearn.metrics import mean_squared_error
import numpy as np
# 示例数据
y_true = np.array([3, -0.5, 2, 7])
y_pred = np.array([2.5, 0.0, 2, 8])
# 计算均方误差
mse = mean_squared_error(y_true, y_pred)
# 打印结果
print("Mean Squared Error:", mse)
在这个例子中,y_true
是真实的目标值,y_pred
是模型的预测值。使用 mean_squared_error
函数计算均方误差,然后打印结果:
Mean Squared Error: 0.375
这个结果表示模型的预测值与真实值之间的均方误差为 0.375。均方误差越小,表示模型的预测越接近真实值。
sklearn.metrics.confusion_matrix
作用:
confusion_matrix
函数用于计算分类模型的混淆矩阵。混淆矩阵是一个方阵,其行表示实际类别,列表示预测类别。它是评估分类模型性能的重要工具,可以用来计算准确性、精确度、召回率等指标。
函数签名:
sklearn.metrics.confusion_matrix(y_true, y_pred, labels=None, sample_weight=None, normalize=None)
返回值:
返回混淆矩阵。
参数解释:
-
y_true
: 真实类别标签。 -
y_pred
: 预测类别标签。 -
labels
: 类别标签列表,用于指定混淆矩阵的顺序。 -
sample_weight
: 样本权重。 -
normalize
: 控制混淆矩阵的归一化方式。如果为None,返回混淆矩阵中的原始计数;如果为 ‘all’,返回每个元素占总样本数的比例;如果为 ‘true’,返回每个元素占真实类别的样本数的比例;如果为 ‘pred’,返回每个元素占预测类别的样本数的比例。
方法:
没有显式的方法。
属性:
没有显式的属性。
参数应用的例子:
from sklearn.metrics import confusion_matrix
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
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.2, random_state=42)
# 初始化模型
model = LogisticRegression()
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 计算混淆矩阵
cm = confusion_matrix(y_test, y_pred)
# 打印混淆矩阵
print("Confusion Matrix:")
print(cm)
在这个例子中,使用逻辑回归模型对鸢尾花数据集进行训练,并在测试集上进行预测。然后,使用confusion_matrix
函数计算混淆矩阵,并打印结果。混淆矩阵的行表示真实类别,列表示预测类别,可以用于评估模型在每个类别上的性能。
precision_score
作用:
precision_score
是scikit-learn库中用于计算分类模型的精确度(Precision)的函数。精确度是指在所有被分类为正类别的样本中,有多少是真正的正类别。它是评估分类模型在正类别上的准确性的重要指标之一。
函数签名:
sklearn.metrics.precision_score(y_true, y_pred, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')
返回值:
返回精确度的值。
参数解释:
-
y_true
: 真实类别标签。 -
y_pred
: 预测类别标签。 -
labels
: 类别标签列表,用于指定计算精确度的类别。默认为None,表示计算所有类别的精确度。 -
pos_label
: 正类别的标签,用于二进制或多类别问题。默认是1。 -
average
: 当目标是多类别时,用于计算精确度的方式。可选值为 ‘micro’, ‘macro’, ‘weighted’, ‘samples’ 或 ‘binary’。默认是 ‘binary’。具体解释见下方。 -
sample_weight
: 样本权重。 -
zero_division
: 当分母为零时的行为,可选值为 ‘warn’, 0 或 1。默认是 ‘warn’,即会发出警告。设置为0将返回0,设置为1将返回1。
方法:
没有显式的方法。
属性:
没有显式的属性。
参数应用的例子:
from sklearn.metrics import precision_score
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
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.2, random_state=42)
# 初始化模型
model = LogisticRegression()
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 计算精确度
precision = precision_score(y_test, y_pred, average='macro')
# 打印精确度
print("Precision:", precision)
在这个例子中,使用逻辑回归模型对鸢尾花数据集进行训练,并在测试集上进行预测。然后,使用precision_score
函数计算宏平均精确度(average='macro'
),并打印结果。average='macro'
表示对所有类别的精确度进行平均,不考虑类别不平衡。
recall_score
作用:
recall_score
是scikit-learn库中用于计算分类模型的召回率(Recall)的函数。召回率是指在所有实际正类别的样本中,有多少被正确地预测为正类别。它是评估分类模型在正类别上的敏感性的指标之一。
函数签名:
sklearn.metrics.recall_score(y_true, y_pred, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')
返回值:
返回召回率的值。
参数解释:
-
y_true
: 真实类别标签。 -
y_pred
: 预测类别标签。 -
labels
: 类别标签列表,用于指定计算召回率的类别。默认为None,表示计算所有类别的召回率。 -
pos_label
: 正类别的标签,用于二进制或多类别问题。默认是1。 -
average
: 当目标是多类别时,用于计算召回率的方式。可选值为 ‘micro’, ‘macro’, ‘weighted’, ‘samples’ 或 ‘binary’。默认是 ‘binary’。具体解释见下方。 -
sample_weight
: 样本权重。 -
zero_division
: 当分母为零时的行为,可选值为 ‘warn’, 0 或 1。默认是 ‘warn’,即会发出警告。设置为0将返回0,设置为1将返回1。
方法:
没有显式的方法。
属性:
没有显式的属性。
参数应用的例子:
from sklearn.metrics import recall_score
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
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.2, random_state=42)
# 初始化模型
model = LogisticRegression()
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 计算召回率
recall = recall_score(y_test, y_pred, average='macro')
# 打印召回率
print("Recall:", recall)
在这个例子中,使用逻辑回归模型对鸢尾花数据集进行训练,并在测试集上进行预测。然后,使用recall_score
函数计算宏平均召回率(average='macro'
),并打印结果。average='macro'
表示对所有类别的召回率进行平均,不考虑类别不平衡。
f1_score
作用:
f1_score
是scikit-learn库中用于计算分类模型的F1分数的函数。F1分数是精确度(Precision)和召回率(Recall)的调和均值,用于综合考虑模型在正类别上的准确性和敏感性。
函数签名:
sklearn.metrics.f1_score(y_true, y_pred, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')
返回值:
返回F1分数的值。
参数解释:
-
y_true
: 真实类别标签。 -
y_pred
: 预测类别标签。 -
labels
: 类别标签列表,用于指定计算F1分数的类别。默认为None,表示计算所有类别的F1分数。 -
pos_label
: 正类别的标签,用于二进制或多类别问题。默认是1。 -
average
: 当目标是多类别时,用于计算F1分数的方式。可选值为 ‘micro’, ‘macro’, ‘weighted’, ‘samples’ 或 ‘binary’。默认是 ‘binary’。具体解释见下方。 -
sample_weight
: 样本权重。 -
zero_division
: 当分母为零时的行为,可选值为 ‘warn’, 0 或 1。默认是 ‘warn’,即会发出警告。设置为0将返回0,设置为1将返回1。
方法:
没有显式的方法。
属性:
没有显式的属性。
参数应用的例子:
from sklearn.metrics import f1_score
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
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.2, random_state=42)
# 初始化模型
model = LogisticRegression()
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 计算F1分数
f1 = f1_score(y_test, y_pred, average='macro')
# 打印F1分数
print("F1 Score:", f1)
在这个例子中,使用逻辑回归模型对鸢尾花数据集进行训练,并在测试集上进行预测。然后,使用f1_score
函数计算宏平均F1分数(average='macro'
),并打印结果。average='macro'
表示对所有类别的F1分数进行平均,不考虑类别不平衡。
decision_function(estimator, X)
sklearn.metrics.decision_function
并不是一个函数,而是一种方法。它通常用于获取分类器的决策函数的原始分数,而不是类别预测。这对于一些应用场景,如支持向量机(SVM)等,非常有用。
方法:
sklearn.metrics.decision_function(estimator, X)
参数解释:
-
estimator
: 已经拟合的分类器对象,如支持向量机(SVM)、逻辑回归等。 -
X
: 特征矩阵。
返回值:
返回模型对输入数据的决策函数的原始分数。
方法解释:
decision_function
方法返回的是分类器对每个样本的决策函数的原始分数。这些分数可以被解释为样本属于正类别的置信度。正数表示模型认为样本属于正类别的程度,负数表示属于负类别的程度。具体的阈值取决于分类器的具体设置。
参数应用的例子:
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import decision_function
# 加载数据集
iris = datasets.load_iris()
X, y = iris.data, iris.target
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 初始化支持向量机分类器
svm_classifier = SVC(kernel='linear', probability=True)
# 训练模型
svm_classifier.fit(X_train, y_train)
# 获取决策函数的原始分数
decision_scores = decision_function(svm_classifier, X_test)
# 打印原始分数
print("Decision Function Scores:")
print(decision_scores)
在这个例子中,使用线性核的支持向量机进行分类。通过调用decision_function
方法获取测试集上样本的决策函数的原始分数。这些原始分数可以用于进一步的分析,比如绘制ROC曲线、计算AUC等。打印的结果将展示测试集上每个样本的原始分数。
precision_recall_curve
作用:
sklearn.metrics.precision_recall_curve
用于计算分类模型在不同阈值下的精确度(Precision)和召回率(Recall)的曲线。该曲线显示了在不同分类阈值下模型的精确度和召回率的权衡情况。
函数签名:
sklearn.metrics.precision_recall_curve(y_true, probas_pred, pos_label=None, sample_weight=None)
返回值:
返回一个包含精确度、召回率和相应阈值的元组 (precision, recall, thresholds)
。
参数解释:
-
y_true
: 真实类别标签。 -
probas_pred
: 模型预测的概率估计。 -
pos_label
: 正类别的标签,默认为None,表示使用正类别在数据中出现的标签。 -
sample_weight
: 样本权重。
方法:
没有显式的方法。
属性:
没有显式的属性。
参数应用的例子:
from sklearn.metrics import precision_recall_curve
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
import matplotlib.pyplot as plt
# 加载数据集
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.2, random_state=42)
# 初始化逻辑回归模型
model = LogisticRegression()
# 训练模型
model.fit(X_train, y_train)
# 获取模型预测的概率估计
probas_pred = model.predict_proba(X_test)[:, 1]
# 计算精确度、召回率和阈值
precision, recall, thresholds = precision_recall_curve(y_test, probas_pred)
# 绘制Precision-Recall曲线
plt.plot(recall, precision, marker='.')
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('Precision-Recall Curve')
plt.show()
在这个例子中,使用逻辑回归模型对鸢尾花数据集进行训练,并在测试集上进行预测。然后,使用precision_recall_curve
函数计算在不同阈值下的精确度和召回率,并绘制Precision-Recall曲线。曲线上的每个点表示在对应的召回率下的精确度值。展示的结果是一个精确度-召回率曲线,可用于评估模型在不同阈值下的性能表现。
ROC曲线
ROC(Receiver Operating Characteristic)曲线是一种用于可视化和评估二分类分类器性能的工具。它显示了在不同分类阈值下真正例率(True Positive Rate,TPR)与假正例率(False Positive Rate,FPR)之间的关系。以下是关于 ROC 曲线的详细解释:
-
真正例率真阳性率(TPR):也称为灵敏度(Sensitivity)或召回率(Recall),它是指被正确分类为正例的样本占所有真正例样本的比例。TPR 表示分类器对正例的识别能力。TPR = (TP) / (TP + FN)
-
假正例率假阳性率(FPR):也称为fall-out,它是指被错误分类为正例的负例样本占所有真负例样本的比例。FPR 表示分类器对负例的误识别率。FPR = (FP) / (FP + TN)
-
ROC 曲线:ROC 曲线是以 FPR 为横轴、TPR 为纵轴的图形。ROC 曲线描述了分类器在不同分类阈值下的性能变化。曲线的左上角代表完美分类器,而曲线的对角线(y = x)代表随机猜测的性能。
-
AUC(Area Under the Curve):AUC 是 ROC 曲线下的面积,用于衡量分类器性能。AUC 的取值范围通常在 0 到 1 之间。AUC 值越接近 1,表示分类器性能越好,能够更好地区分正例和负例。AUC 值越接近 0.5,则表示分类器的性能类似于随机猜测。
-
应用领域:ROC 曲线和 AUC 常用于医学诊断、金融风险评估、信用评分、推荐系统、广告点击率预测等领域,用于评估二分类问题中的模型性能。
通过观察 ROC 曲线和计算 AUC 值,可以帮助你了解分类器在不同阈值下的性能表现。通常情况下,希望选择具有高 AUC 值的分类器,因为它在不同的阈值下都表现良好。但需要根据具体任务和需求来综合考虑其他性能指标,例如精确度、召回率、F1 分数等。
AUC曲线
AUC 是 ROC 曲线下的面积(Area Under the Receiver Operating Characteristic Curve)的缩写。它是一种用于衡量二分类分类器性能的常见指标之一。AUC 的取值范围通常在 0 到 1 之间,用来度量分类器在不同阈值下的性能。
以下是关于 AUC 的详细解释:
-
ROC 曲线:ROC 曲线是一种用于可视化二分类分类器性能的工具。它是一个以假正例率(False Positive Rate,FPR)为横轴、真正例率(True Positive Rate,TPR)为纵轴的曲线。在 ROC 曲线中,每个点代表分类器在不同阈值下的性能表现。
-
AUC 的计算:AUC 表示 ROC 曲线下的面积,即 ROC 曲线与横轴之间的面积。AUC 的取值范围在 0 到 1 之间,通常情况下,AUC 值越接近 1,表示分类器性能越好,能够更好地区分正例和负例;如果 AUC 值接近 0.5,则表示分类器的性能类似于随机猜测,不能有效地区分正例和负例。
-
AUC 的意义:AUC 表示的是分类器在不同阈值下的性能综合。当你需要比较多个不同模型的性能时,AUC 是一个有用的指标,因为它不依赖于阈值的选择。更具体地,如果一个模型的 AUC 值高于另一个模型,那么在不同的阈值下,第一个模型通常表现更好。
-
应用领域:AUC 常用于医学诊断、金融风险评估、信用评分、推荐系统、广告点击率预测等领域,用于评估二分类问题中的模型性能。
需要注意的是,AUC 是一个有用的性能指标,但它并不提供关于分类器性能的详细信息,例如精确度、召回率等。因此,在评估分类器性能时,通常会综合考虑多个指标,而不仅仅依赖于 AUC。
ROC 曲线的分类阈值
假设我们有一个二分类问题,其中正例(Positive)表示癌症患者,负例(Negative)表示健康人群。我们的模型预测了每个样本的概率,并根据不同的阈值将样本分类为正例或负例。以下是示例数据:
现在,我们将根据阈值 0.7
对样本进行分类,并展示根据阈值分类的正例和负例:
# 真实标签(Ground Truth)
y_true = [1, 0, 1, 1, 0, 0, 1, 0, 1, 0]
# 模型的二分类预测概率
y_prob = [0.9, 0.7, 0.8, 0.6, 0.3, 0.2, 0.85, 0.4, 0.95, 0.1]
# 选择阈值
threshold = 0.7
# 根据阈值分类样本
y_pred = [1 if p >= threshold else 0 for p in y_prob]
# 初始化 TP、FP、TN、FN 的列表
TP_indices = []
FP_indices = []
TN_indices = []
FN_indices = []
# 根据分类结果确定索引
for i in range(len(y_true)):
if y_true[i] == 1 and y_pred[i] == 1:
TP_indices.append(i)
elif y_true[i] == 0 and y_pred[i] == 1:
FP_indices.append(i)
elif y_true[i] == 0 and y_pred[i] == 0:
TN_indices.append(i)
elif y_true[i] == 1 and y_pred[i] == 0:
FN_indices.append(i)
print('y_pred: ',y_pred) # [1, 1, 1, 1, 0, 0, 1, 0, 1, 0]
print('y_true: ', y_true) # [1, 0, 1, 1, 0, 0, 1, 0, 1, 0]
# 打印结果
print("TP(真正例)的索引:", TP_indices)
print("FP(假正例)的索引:", FP_indices)
print("TN(真负例)的索引:", TN_indices)
print("FN(假负例)的索引:", FN_indices)
输出结果:
y_pred: [1, 1, 1, 0, 0, 0, 1, 0, 1, 0]
y_true: [1, 0, 1, 1, 0, 0, 1, 0, 1, 0]
TP(真正例)的索引: [0, 2, 6, 8]
FP(假正例)的索引: [1]
TN(真负例)的索引: [4, 5, 7, 9]
FN(假负例)的索引: [3]
这些值的含义如下:
- TP(真正例):模型正确地将癌症患者1预测为癌症患者1的样本数量。
- FP(假正例):模型错误地将健康人0预测为癌症患者1的样本数量。
- TN(真负例):模型正确地将健康人0预测为健康人0的样本数量。
- FN(假负例):模型错误地将癌症患者1预测为健康人0的样本数量。
使用这些值,我们可以计算 TPR(真正例率,召回率)和 FPR(假正例率):
TPR = (TP) / (TP + FN),其中 TP 是真正例的数量,FN 是假负例的数量。
FPR = (FP) / (FP + TN),其中 FP 是假正例的数量,TN 是真负例的数量。
根据选择的阈值 0.7 和示例数据,我们可以计算:
TPR = (4) / (5) = 0.8
FPR = (1) / (1 + 4) = 0.2
所以,在这个示例中,TPR 为 0.8(或 80%),FPR 为 0.2(或 20%)。
这些值表示了模型在不同阈值下的性能,并用于构建 ROC 曲线上的一个点。通过改变阈值,我们可以得到不同的 TPR 和 FPR 值,最终形成整个 ROC 曲线。
当计算 ROC 曲线时,通过改变分类阈值,我们可以观察到真正例率(TPR,召回率)和假正例率(FPR)的变化,这有助于了解分类器在不同阈值下的性能表现。
以下是一个示例,说明如何使用 ROC 曲线的阈值数组来观察性能的变化:
假设我们有一个二分类问题,其中正例是癌症患者,负例是健康人群。我们训练了一个癌症检测模型,并获得了模型的预测得分(或概率)。现在,我们希望使用 ROC 曲线来评估模型的性能。
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
# 真实标签
y_true = [1, 0, 1, 1, 0, 0, 1, 0, 1, 0]
# 模型预测的得分(概率)
y_score = [0.9, 0.7, 0.8, 0.6, 0.3, 0.2, 0.85, 0.4, 0.95, 0.1]
# y_pred
# 计算 ROC 曲线
fpr, tpr, thresholds = roc_curve(y_true, y_score)
# 计算 AUC
roc_auc = auc(fpr, tpr)
# 打印 AUC 值
print("AUC:", roc_auc)
# 绘制 ROC 曲线
plt.figure(figsize=(6, 6))
plt.plot(fpr, tpr, marker='o', linestyle='-', color='b')
plt.xlabel('假正例率 (FPR)')
plt.ylabel('真正例率 (TPR)')
plt.title('ROC 曲线 (AUC = {:.2f})'.format(roc_auc))
plt.grid(True)
plt.show()
# 打印阈值数组
print("阈值数组:", thresholds)
print('y_pred/y_score: ',y_score)
print('y_true: ', y_true)
print("TPR (Sensitivity):", tpr)
print("FPR (1 - Specificity):", fpr)
AUC: 0.9600000000000001
阈值数组: [ inf 0.95 0.8 0.7 0.6 0.1 ]
y_pred/y_score: [0.9, 0.7, 0.8, 0.6, 0.3, 0.2, 0.85, 0.4, 0.95, 0.1]
y_true: [1, 0, 1, 1, 0, 0, 1, 0, 1, 0]
TPR (Sensitivity): [0. 0.2 0.8 0.8 1. 1. ]
FPR (1 - Specificity): [0. 0. 0. 0.2 0.2 1. ]
在上述示例中,我们首先提供了真实标签 y_true
和模型预测的得分 y_score
。然后,使用 roc_curve()
函数计算了 ROC 曲线的参数,包括 FPR、TPR 和阈值。接下来,我们计算了 ROC 曲线下的面积(AUC),并打印了 AUC 值。
最后,我们绘制了 ROC 曲线,并通过打印阈值数组来观察不同阈值下的性能变化。阈值数组包含了一系列可能的阈值值,每个阈值对应于 ROC 曲线上的一个点。改变阈值可以影响 TPR 和 FPR 的值,从而影响性能权衡。这有助于选择适合具体任务需求的阈值。
sklearn.metrics.roc_curve()
sklearn.metrics.roc_curve()
是 Scikit-Learn 中用于计算 ROC 曲线的函数。ROC 曲线(Receiver Operating Characteristic curve)用于评估二分类分类器的性能,特别是在不同阈值下的性能表现。以下是关于 roc_curve()
函数的详细解释:
作用:
roc_curve()
用于计算二分类分类器的 ROC 曲线,该曲线显示了真正例率(True Positive Rate,TPR,也称为召回率)和假正例率(False Positive Rate,FPR)之间的关系。ROC 曲线通常用于评估分类器在不同分类阈值下的性能。
返回值:
roc_curve()
返回一个元组,其中包含以下三个数组:
-
fpr
(假正例率数组):包含不同阈值下的假正例率值。 -
tpr
(真正例率数组):包含不同阈值下的真正例率值,通常等同于召回率。 -
thresholds
(阈值数组):包含用于计算对应 FPR 和 TPR 的阈值值。
参数:
roc_curve()
函数的参数如下:
-
y_true
:真实的二分类标签数组,包含样本的真实标签。 -
y_score
:模型的预测得分(或概率)数组,用于计算 ROC 曲线。通常是模型对正类别的预测概率或得分。 -
pos_label
(可选,默认为 1):指定正类别的标签。对于二分类问题,默认为 1。 -
sample_weight
(可选):样本权重数组,用于赋予不同样本不同的权重。 -
drop_intermediate
(可选,默认为 True):如果为 True,则会删除与 FPR 和 TPR 之间的中间值相关的阈值。如果为 False,则保留所有阈值。
示例:
下面是一个示例,展示如何使用 roc_curve()
函数计算 ROC 曲线,并打印结果:
from sklearn.metrics import roc_curve
import matplotlib.pyplot as plt
# 真实标签和模型预测概率(得分)
y_true = [0, 0, 1, 1, 0, 1, 0, 1, 1, 0]
y_score = [0.2, 0.3, 0.7, 0.8, 0.4, 0.9, 0.3, 0.6, 0.85, 0.25]
# 计算 ROC 曲线
fpr, tpr, thresholds = roc_curve(y_true, y_score)
# 打印结果
print("FPR:", fpr)
print("TPR:", tpr)
print("阈值:", thresholds)
# 绘制 ROC 曲线
plt.figure(figsize=(6, 6))
plt.plot(fpr, tpr, marker='o', linestyle='-', color='b')
plt.xlabel('假正例率 (FPR)')
plt.ylabel('真正例率 (TPR)')
plt.title('ROC 曲线')
plt.grid(True)
plt.show()
在此示例中,我们首先提供了真实标签 y_true
和模型预测的得分 y_score
。然后,使用 roc_curve()
函数计算 ROC 曲线的参数,包括 FPR、TPR 和阈值。最后,我们绘制了 ROC 曲线以可视化分类器的性能。
auc()
sklearn.metrics.auc()
是 Scikit-Learn 中用于计算 ROC 曲线下的面积(AUC,Area Under the ROC Curve)的函数。AUC 用于评估二分类分类器的性能,特别是在不同阈值下的性能表现。以下是关于 auc()
函数的详细解释:
作用:
auc()
函数用于计算二分类分类器的 ROC 曲线下的面积,即 AUC。AUC 是一个常见的性能指标,用于度量分类器的质量和能力,通常用于比较不同分类器的性能。
返回值:
auc()
函数返回一个浮点数,表示计算得到的 ROC 曲线下的面积(AUC)。
参数:
auc()
函数的参数如下:
-
x
:FPR(假正例率)的数组或列表。通常是由roc_curve()
函数计算得到的。 -
y
:TPR(真正例率,召回率)的数组或列表。通常是由roc_curve()
函数计算得到的。
示例:
下面是一个示例,展示如何使用 auc()
函数计算 ROC 曲线下的面积,并打印结果:
from sklearn.metrics import auc, roc_curve
import matplotlib.pyplot as plt
# 真实标签和模型预测概率(得分)
y_true = [0, 0, 1, 1, 0, 1, 0, 1, 1, 0]
y_score = [0.2, 0.3, 0.7, 0.8, 0.4, 0.9, 0.3, 0.6, 0.85, 0.25]
# 计算 ROC 曲线
fpr, tpr, thresholds = roc_curve(y_true, y_score)
# 计算 AUC
roc_auc = auc(fpr, tpr)
# 打印 AUC 值
print("AUC:", roc_auc)
# 绘制 ROC 曲线
plt.figure(figsize=(6, 6))
plt.plot(fpr, tpr, marker='o', linestyle='-', color='b')
plt.xlabel('假正例率 (FPR)')
plt.ylabel('真正例率 (TPR)')
plt.title('ROC 曲线 (AUC = {:.2f})'.format(roc_auc))
plt.grid(True)
plt.show()
在此示例中,我们首先提供了真实标签 y_true
和模型预测的得分 y_score
。然后,使用 roc_curve()
函数计算 ROC 曲线的参数,包括 FPR、TPR 和阈值。接下来,使用 auc()
函数计算 ROC 曲线下的面积(AUC)。最后,我们打印了计算得到的 AUC 值,并绘制了 ROC 曲线以可视化分类器的性能。
roc_auc_score()
作用:
sklearn.metrics.roc_auc_score
用于计算分类模型的ROC-AUC(Receiver Operating Characteristic - Area Under the Curve)分数。ROC-AUC是ROC曲线下的面积,用于度量分类器在不同阈值下的性能,同时考虑了真正例率(True Positive Rate)和假正例率(False Positive Rate)。
函数签名:
sklearn.metrics.roc_auc_score(y_true, y_score, average='macro', sample_weight=None, max_fpr=None, multi_class='raise')
返回值:
返回一个包含ROC-AUC分数的浮点数。
参数解释:
-
y_true
: 真实类别标签。 -
y_score
: 模型的决策函数的原始分数。 -
average
: 当目标是多类别时,用于计算ROC-AUC的方式。可选值为 ‘micro’, ‘macro’, ‘weighted’ 或 None。默认是 ‘macro’。 -
sample_weight
: 样本权重。 -
max_fpr
: 返回具有假正例率不超过此值的截断ROC-AUC。 -
multi_class
: 多类别问题的处理方式。可选值为 ‘raise’、‘ovr’(One-vs-Rest)、‘ovo’(One-vs-One)。默认是 ‘raise’。
方法:
没有显式的方法。
属性:
没有显式的属性。
参数应用的例子:
from sklearn.metrics import roc_auc_score
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
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.2, random_state=42)
# 初始化逻辑回归模型
model = LogisticRegression()
# 训练模型
model.fit(X_train, y_train)
# 获取模型预测的概率估计
y_score = model.predict_proba(X_test)[:, 1]
# 计算ROC-AUC分数
roc_auc = roc_auc_score(y_test, y_score)
# 打印ROC-AUC分数
print("ROC-AUC Score:", roc_auc)
在这个例子中,使用逻辑回归模型对鸢尾花数据集进行训练,并在测试集上进行预测。然后,使用roc_auc_score
函数计算ROC-AUC分数,并打印结果。ROC-AUC分数用于度量二进制或多类别分类器在不同阈值下的性能。
区别
roc_auc_score
和直接使用 auc()
函数的区别在于它们的用途和参数传递方式。
-
用途:
roc_auc_score
: 主要用于计算二分类问题的ROC-AUC分数,需要传入真实标签y_true
和模型的决策函数的原始分数y_score
。auc()
: 可以用于计算任意两组数值之间的AUC,不仅限于ROC曲线。可以用于评估任何两组数值之间的排序关系。
-
参数传递方式:
roc_auc_score
: 要求传入真实标签y_true
和模型的决策函数的原始分数y_score
,其计算过程考虑了ROC曲线的特定情境。auc()
: 接受两个数组作为参数,分别表示x轴和y轴的数值,计算的是这两个数组之间的AUC,可以用于任意两组数值的排序关系。
下面是一个简单的示例,演示了两者的使用:
from sklearn.metrics import roc_auc_score, auc
import numpy as np
import matplotlib.pyplot as plt
# 生成示例数据
y_true = np.array([0, 1, 1, 0, 1, 0, 1])
y_score = np.array([0.1, 0.8, 0.4, 0.3, 0.9, 0.2, 0.7])
# 使用 roc_auc_score 计算 ROC-AUC
roc_auc = roc_auc_score(y_true, y_score)
print("ROC-AUC Score (roc_auc_score):", roc_auc)
# 使用 auc 计算任意两组数值之间的 AUC
fpr, tpr, thresholds = roc_curve(y_true, y_score)
auc_value = auc(fpr, tpr)
print("AUC (auc()):", auc_value)
# 绘制 ROC 曲线
plt.plot(fpr, tpr, label=f'ROC Curve (AUC = {auc_value:.2f})')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend()
plt.show()
在这个例子中,首先使用 roc_auc_score
计算了ROC-AUC分数,然后使用 auc()
计算了ROC曲线下的面积,同时绘制了ROC曲线。在实际应用中,根据需要选择合适的函数。如果主要关注二分类问题的ROC-AUC分数,可以使用 roc_auc_score
;如果需要计算任意两组数值之间的AUC,可以使用 auc()
。
轮廓系数 见上
sklearn.tree
DecisionTreeClassifier()
sklearn.tree.DecisionTreeClassifier()
是 scikit-learn 库中用于构建决策树分类器的类。决策树是一种基于树结构的监督学习算法,它通过在数据集中选择最佳的特征进行分割,递归地构建树结构,从而实现对样本的分类。
函数签名:
sklearn.tree.DecisionTreeClassifier(criterion='gini', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, ccp_alpha=0.0)
参数解释:
criterion
: 用于衡量特征选择的标准,可以是 ‘gini’(基尼系数)或 ‘entropy’(信息增益)。默认为 ‘gini’。splitter
: 用于在节点上选择分割的策略,可以是 ‘best’(选择最佳分割)或 ‘random’(随机选择分割)。默认为 ‘best’。max_depth
: 树的最大深度。如果为 None,则节点会一直扩展,直到每个叶子都包含少于min_samples_split
个样本。默认为 None。min_samples_split
: 分割内部节点所需的最小样本数。默认为 2。min_samples_leaf
: 叶子节点所需的最小样本数。默认为 1。min_weight_fraction_leaf
: 叶子节点所需的最小加权样本数的总和的分数。默认为 0.0。max_features
: 在进行最佳分割时要考虑的特征数。可以是整数、浮点数、字符串(‘sqrt’、‘log2’、‘auto’)或 None。默认为 None。random_state
: 控制每次拟合时树建造的随机性。可以是整数、RandomState 实例或 None。默认为 None。max_leaf_nodes
: 树的最大叶子节点数。如果为 None,则不设置限制。默认为 None。min_impurity_decrease
: 如果分割导致不纯度的减少大于或等于此值,则节点将被拆分。默认为 0.0。min_impurity_split
: 树生长过程中早停止的阈值。如果节点的不纯度高于阈值,则该节点将被分割。已弃用,将在 0.26 版本中删除。class_weight
: 用于计算不平衡类的权重。可以是字典、‘balanced’ 或 None。默认为 None。ccp_alpha
: 用于复杂性剪枝的复杂性参数。默认为 0.0。
返回值:
返回一个决策树分类器的实例。
方法:
fit(X, y, sample_weight=None)
: 用训练数据拟合模型。predict(X)
: 对数据进行预测。predict_proba(X)
: 返回每个类别的概率估计。score(X, y, sample_weight=None)
: 返回模型的准确率或性能度量。apply(X)
: 返回每个样本的叶子节点的索引。decision_path(X)
: 返回每个样本的决策路径。
属性:
feature_importances_
: 特征重要性,表示每个特征对决策树的贡献程度。tree_
: 决策树的底层数据结构。
应用例子:
from sklearn.tree import DecisionTreeClassifier
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)
# 创建决策树分类器并拟合数据
dt_classifier = DecisionTreeClassifier(random_state=42)
dt_classifier.fit(X_train, y_train)
# 预测测试集
y_pred = dt_classifier.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
# 打印结果
print("Example:")
print("Predicted Labels:", y_pred)
print("Accuracy:", accuracy)
打印结果:
Example:
Predicted Labels: [1 0 2 1 1 0 1 2 1 1 2 0 0 0 0 1 2 1 1 2 0 2 0 2 2]
Accuracy: 1.0
在这个例子中,DecisionTreeClassifier
被用于对鸢尾花数据集进行分类。模型被训练并用于对测试集进行预测,最后计算了模型的准确率。
DecisionTreeRegressor()
sklearn.tree.DecisionTreeRegressor
是 scikit-learn 库中的一个类,用于实现决策树回归。它通过递归地将数据集划分为更小的子集来工作,直到满足某个停止条件为止。
函数签名
sklearn.tree.DecisionTreeRegressor(
criterion='mse',
splitter='best',
max_depth=None,
min_samples_split=2,
min_samples_leaf=1,
min_weight_fraction_leaf=0.0,
max_features=None,
random_state=None,
max_leaf_nodes=None,
min_impurity_decrease=0.0,
min_impurity_split=None,
presort=False
)
返回值
返回一个训练好的 DecisionTreeRegressor
对象,可以用于进行预测或进一步的操作。
参数解释
- criterion:字符串,可选 “mse” 或 “friedman_mse”,默认 “mse”。用于评估划分质量的准则。
- splitter:字符串,可选 “best” 或 “random”,默认 “best”。用于选择最佳划分的方式。
- max_depth:整数或 None,可选 (默认=None)。树的最大深度。
- min_samples_split:整数或浮点数,可选 (默认=2)。拆分内部节点所需的最少样本数。
- min_samples_leaf:整数或浮点数,可选 (默认=1)。在叶节点上所需的最小样本数。
- min_weight_fraction_leaf:浮点数,可选 (默认=0.)。叶节点上所有样本权重和的最小比例。
- max_features:整数、浮点数、字符串或 None,可选 (默认=None)。用于寻找最佳划分时要考虑的特征数量。
- random_state:整数或 RandomState 实例,可选 (默认=None)。用于控制数据洗牌和子树随机选择的种子。
- max_leaf_nodes:整数或 None,可选 (默认=None)。树的最大叶节点数。
- min_impurity_decrease:浮点数,可选 (默认=0.)。分裂节点时所需的最小不纯度减少。
- min_impurity_split:浮点数,可选 (默认=None)。提前停止树生长的阈值。
- presort:布尔值,可选 (默认=False)。是否预先对数据进行排序以加速树的构建。
方法
- fit(X, y):在数据集
(X, y)
上训练模型。- 返回值:
self
(即训练好的模型)。
- 返回值:
- predict(X):预测
X
的值。- 参数:
X
:形状为(n_samples, n_features)
的数组或类似数据结构。 - 返回值:形状为
(n_samples,)
的数组,包含X
的预测值。
- 参数:
属性
- feature_importances_:形状为
(n_features,)
的数组。返回每个特征的重要性。 - tree_:Tree 对象。树的结构,包含诸如
node_count
、children_left
、children_right
、feature
、threshold
等属性。
示例
from sklearn.datasets import make_regression
from sklearn.tree import DecisionTreeRegressor
# 生成模拟数据
X, y = make_regression(n_samples=100, n_features=1, noise=0.1, random_state=42)
# 初始化模型
regressor = DecisionTreeRegressor(max_depth=3, random_state=42)
# 训练模型
regressor.fit(X, y)
# 预测
y_pred = regressor.predict(X)
# 打印预测结果
print(y_pred)
sklearn.ensemble
VotingClassifier()
sklearn.ensemble.VotingClassifier()
是 scikit-learn 库中的集成学习方法之一,用于构建一个投票分类器,结合多个独立的基分类器的预测。这种方法可以用于组合多个弱分类器,形成一个更强大的分类器。
函数签名:
sklearn.ensemble.VotingClassifier(estimators, voting='hard', weights=None, n_jobs=None, flatten_transform=True, verbose=False)
参数解释:
estimators
: 一个列表,包含形如(name, estimator)
的元组,其中name
是分类器的名称,estimator
是分类器对象。voting
: 投票策略,可以是 ‘hard’(硬投票,多数票决定)或 ‘soft’(软投票,加权平均概率)。默认为 ‘hard’。weights
: 当投票策略为 ‘soft’ 时,可以通过传递一个权重列表来加权平均概率。n_jobs
: 并行运算的数量,用于拟合每个分类器。默认为 None,表示不使用并行运算。flatten_transform
: 如果为 True,则对 transform 结果进行扁平化。默认为 True。verbose
: 如果为 True,则打印每个分类器的拟合信息。默认为 False。
返回值:
返回一个投票分类器的实例。
方法:
fit(X, y, sample_weight=None)
: 用训练数据拟合模型。predict(X)
: 对数据进行投票预测。predict_proba(X)
: 对数据进行概率估计,仅在投票策略为 ‘soft’ 时可用。transform(X)
: 对输入数据进行变换,每个基分类器生成的特征被水平堆叠。score(X, y, sample_weight=None)
: 返回模型的准确率或性能度量。
属性:
estimators_
: 拟合的基分类器列表。weights_
: 权重列表,用于投票策略 ‘soft’。
应用例子:
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
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)
# 创建基分类器
clf1 = LogisticRegression(random_state=42)
clf2 = SVC(probability=True, random_state=42)
# 创建投票分类器
voting_clf = VotingClassifier(estimators=[('lr', clf1), ('svm', clf2)], voting='hard')
# 拟合数据
voting_clf.fit(X_train, y_train)
# 预测测试集
y_pred = voting_clf.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
# 打印结果
print("Example:")
print("Predicted Labels:", y_pred)
print("Accuracy:", accuracy)
打印结果:
Example:
Predicted Labels: [1 0 2 1 1 0 1 2 1 1 2 0 0 0 0 1 2 1 1 2 0 2 0 2 2]
Accuracy: 1.0
在这个例子中,VotingClassifier
被用于组合逻辑回归和支持向量机两个基分类器。通过对它们的预测进行硬投票,得到了一个更强大的分类器,最后计算了模型的准确率。
BaggingClassifier()
sklearn.ensemble.BaggingClassifier()
是 scikit-learn 库中的袋装集成分类器,用于构建一个集成模型,通过对训练数据的不同子集进行采样,拟合多个基分类器。袋装(Bagging)的思想是通过构建多个基分类器的平均结果来提高整体性能。
函数签名:
sklearn.ensemble.BaggingClassifier(base_estimator=None, n_estimators=10, max_samples=1.0, max_features=1.0, bootstrap=True, bootstrap_features=False, oob_score=False, warm_start=False, n_jobs=None, random_state=None, verbose=0)
参数解释:
base_estimator
: 基分类器,如果为 None,则默认使用决策树分类器。可以是分类器对象,或者 None。默认为 None。n_estimators
: 要构建的基分类器数量。默认为 10。max_samples
: 每个基分类器使用的样本数占总体的比例。可以是整数(样本数)或浮点数(比例)。默认为 1.0。max_features
: 每个基分类器使用的特征数占总体的比例。可以是整数(特征数)或浮点数(比例)。默认为 1.0。bootstrap
: 是否进行自助法(bootstrap sampling),即允许有放回地从样本中进行采样。默认为 True。bootstrap_features
: 是否对特征进行有放回地采样。默认为 False。oob_score
: 是否使用袋外(out-of-bag)样本来估计模型的性能。默认为 False。warm_start
: 如果为 True,则使用前一次调用的解作为初始值并继续拟合。默认为 False。n_jobs
: 并行运算的数量,用于拟合每个基分类器。默认为 None,表示不使用并行运算。random_state
: 控制每次拟合时采样的随机性。可以是整数、RandomState 实例或 None。默认为 None。verbose
: 控制拟合过程的详细程度。默认为 0。
返回值:
返回一个袋装集成分类器的实例。
方法:
fit(X, y, sample_weight=None)
: 用训练数据拟合模型。predict(X)
: 对数据进行预测。predict_proba(X)
: 返回每个类别的概率估计。score(X, y, sample_weight=None)
: 返回模型的准确率或性能度量。
属性:
base_estimator_
: 拟合的基分类器。estimators_
: 拟合的基分类器列表。classes_
: 类别标签。n_classes_
: 类别的数量。
应用例子:
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
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)
# 创建基分类器
base_classifier = DecisionTreeClassifier(random_state=42)
# 创建袋装集成分类器并拟合数据
bagging_classifier = BaggingClassifier(base_classifier, n_estimators=10, random_state=42)
bagging_classifier.fit(X_train, y_train)
# 预测测试集
y_pred = bagging_classifier.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
# 打印结果
print("Example:")
print("Predicted Labels:", y_pred)
print("Accuracy:", accuracy)
打印结果:
Example:
Predicted Labels: [1 0 2 1 1 0 1 2 1 1 2 0 0 0 0 1 2 1 1 2 0 2 0 2 2]
Accuracy: 1.0
在这个例子中,BaggingClassifier
被用于对鸢尾花数据集进行分类。使用决策树分类器作为基分类器,模型被训练并用于对测试集进行预测,最后计算了模型的准确率。
RandomForestClassifier()
关于随机森林分类器(Random Forest Classifier)的信息,因为随机森林属于集成学习方法,而其类名为 sklearn.ensemble.RandomForestClassifier
。
以下是 RandomForestClassifier
的相关信息:
函数签名:
sklearn.ensemble.RandomForestClassifier(n_estimators=100, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None, ccp_alpha=0.0, max_samples=None)
参数解释:
n_estimators
: 随机森林中树的数量。默认为 100。criterion
: 用于衡量特征选择的标准,可以是 ‘gini’(基尼系数)或 ‘entropy’(信息增益)。默认为 ‘gini’。max_depth
: 树的最大深度。如果为 None,则节点会一直扩展,直到每个叶子都包含少于min_samples_split
个样本。默认为 None。min_samples_split
: 分割内部节点所需的最小样本数。默认为 2。min_samples_leaf
: 叶子节点所需的最小样本数。默认为 1。min_weight_fraction_leaf
: 叶子节点所需的最小加权样本数的总和的分数。默认为 0.0。max_features
: 在进行最佳分割时要考虑的特征数。可以是整数、浮点数、字符串(‘sqrt’、‘log2’、‘auto’)或 None。默认为 ‘auto’。max_leaf_nodes
: 树的最大叶子节点数。如果为 None,则不设置限制。默认为 None。min_impurity_decrease
: 如果分割导致不纯度的减少大于或等于此值,则节点将被拆分。默认为 0.0。min_impurity_split
: 树生长过程中早停止的阈值。已弃用,将在 0.26 版本中删除。bootstrap
: 是否对每棵树使用自助法(bootstrap sampling)。默认为 True。oob_score
: 是否使用袋外(out-of-bag)样本来估计模型的性能。默认为 False。n_jobs
: 并行运算的数量,用于拟合每棵树。默认为 None,表示不使用并行运算。random_state
: 控制每棵树建造的随机性。可以是整数、RandomState 实例或 None。默认为 None。verbose
: 控制拟合过程的详细程度。默认为 0。warm_start
: 如果为 True,则使用前一次调用的解作为初始值并继续拟合。默认为 False。class_weight
: 用于计算不平衡类的权重。可以是字典、‘balanced’ 或 None。默认为 None。ccp_alpha
: 用于复杂性剪枝的复杂性参数。默认为 0.0。max_samples
: 每棵树的最大样本数,用于对每棵树进行自助法(bootstrap sampling)。默认为 None。
返回值:
返回一个随机森林分类器的实例。
方法:
fit(X, y, sample_weight=None)
: 用训练数据拟合模型。predict(X)
: 对数据进行预测。predict_proba(X)
: 返回每个类别的概率估计。score(X, y, sample_weight=None)
: 返回模型的准确率或性能度量。
属性:
estimators_
: 拟合的树列表。classes_
: 类别标签。n_classes_
: 类别的数量。n_features_
: 特征的数量。
应用例子:
from sklearn.ensemble import RandomForestClassifier
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)
# 创建随机森林分类器并拟合数据
rf_classifier = RandomForestClassifier(n_estimators=100, random_state=42)
rf_classifier.fit(X_train, y_train)
# 预测测试集
y_pred = rf_classifier.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
# 打印结果
print("Example:")
print("Predicted Labels:", y_pred)
print("Accuracy:", accuracy)
打印结果:
Example:
Predicted Labels: [1 0 2 1 1 0 1 2 1 1 2 0 0 0 0 1 2 1 1 2 0 2 0 2 2]
Accuracy: 1.0
在这个例子中,RandomForestClassifier
被用于对鸢尾花数据集进行分类。模型被训练并用于对测试集进行预测,最后计算了模型的准确率。
AdaBoostClassifier()
sklearn.ensemble.AdaBoostClassifier()
是 scikit-learn 库中的 AdaBoost 集成分类器,用于构建一个由多个弱分类器组成的强分类器。AdaBoost 的主要思想是通过训练一系列弱分类器,每个弱分类器都专注于之前分类错误的样本,最终通过加权投票来提高整体性能。
函数签名:
sklearn.ensemble.AdaBoostClassifier(base_estimator=None, n_estimators=50, learning_rate=1.0, algorithm='SAMME.R', random_state=None)
参数解释:
base_estimator
: 弱分类器,如果为 None,则默认使用决策树分类器。可以是分类器对象,或者 None。默认为 None。n_estimators
: 要构建的弱分类器数量。默认为 50。learning_rate
: 控制每个弱分类器的权重缩放。较小的值会导致更好的收敛,但也需要更多的弱分类器。默认为 1.0。algorithm
: AdaBoost 算法,可以是 ‘SAMME’ 或 ‘SAMME.R’。默认为 ‘SAMME.R’。random_state
: 控制每次拟合时的随机性。可以是整数、RandomState 实例或 None。默认为 None。
返回值:
返回一个 AdaBoost 集成分类器的实例。
方法:
fit(X, y, sample_weight=None)
: 用训练数据拟合模型。predict(X)
: 对数据进行预测。predict_proba(X)
: 返回每个类别的概率估计。staged_predict(X)
: 返回每个阶段的预测,即每个基分类器的累积预测。staged_predict_proba(X)
: 返回每个阶段的类别概率估计。score(X, y, sample_weight=None)
: 返回模型的准确率或性能度量。
属性:
base_estimator_
: 拟合的基分类器。estimators_
: 拟合的弱分类器列表。classes_
: 类别标签。n_classes_
: 类别的数量。estimator_weights_
: 每个弱分类器的权重。estimator_errors_
: 每个弱分类器的错误率。feature_importances_
: 特征重要性,仅在基分类器支持时可用。
应用例子:
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
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)
# 创建基分类器
base_classifier = DecisionTreeClassifier(max_depth=1, random_state=42)
# 创建 AdaBoost 集成分类器并拟合数据
adaboost_classifier = AdaBoostClassifier(base_classifier, n_estimators=50, random_state=42)
adaboost_classifier.fit(X_train, y_train)
# 预测测试集
y_pred = adaboost_classifier.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
# 打印结果
print("Example:")
print("Predicted Labels:", y_pred)
print("Accuracy:", accuracy)
打印结果:
Example:
Predicted Labels: [1 0 2 1 1 0 1 2 1 1 2 0 0 0 0 1 2 1 1 2 0 2 0 2 2]
Accuracy: 1.0
在这个例子中,AdaBoostClassifier
被用于对鸢尾花数据集进行分类。使用深度为 1 的决策树分类器作为基分类器,模型被训练并用于对测试集进行预测,最后计算了模型的准确率。
GradientBoostingRegressor()
sklearn.ensemble.GradientBoostingRegressor()
是 scikit-learn 库中的一个函数,用于实现梯度提升回归。梯度提升是一种基于决策树的机器学习算法,它用于解决回归和分类问题。梯度提升通过将弱学习器(通常是决策树)组合成一个强学习器来工作,逐步减少残差,从而优化模型的性能。
函数签名
sklearn.ensemble.GradientBoostingRegressor(loss='ls', learning_rate=0.1, n_estimators=100, subsample=1.0, criterion='friedman_mse', min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_depth=3, min_impurity_decrease=0.0, min_impurity_split=None, init=None, random_state=None, max_features=None, verbose=0, max_leaf_nodes=None, warm_start=False, presort='deprecated', ccp_alpha=0.0)
返回值
GradientBoostingRegressor()
函数返回一个训练好的梯度提升回归模型对象,你可以使用此对象进行预测和评估。
参数解释
loss
: 损失函数,用于度量模型预测的错误。可选'ls'
(最小二乘,默认)、'lad'
(最小绝对偏差)、'huber'
或'quantile'
。learning_rate
: 学习率,用于缩小每步的贡献。较小的值需要更多的迭代次数。n_estimators
: 提升阶段(即弱学习器)的数量。subsample
: 用于拟合每个基学习器的样本比例。如果小于 1,则会导致随机采样。criterion
: 划分标准,用于选择最佳切分点。可选'mse'
(均方误差,默认)、'friedman_mse'
、'mae'
(平均绝对误差)。min_samples_split
: 拆分内部节点所需的最小样本数。min_samples_leaf
: 在叶节点上所需的最小样本数。min_weight_fraction_leaf
: 在叶节点上所需的总权重的最小分数。max_depth
: 树的最大深度。min_impurity_decrease
: 划分节点所需的最小不纯度减少。min_impurity_split
: 提前停止树生长的最小不纯度。init
: 估计器的初始预测。可以是None
(默认)或估计器实例。random_state
: 随机数生成器的种子,或None
(默认)。max_features
: 寻找最佳划分时要考虑的特征数量。verbose
: 控制日志输出的详细程度。max_leaf_nodes
: 树的最大叶节点数。warm_start
: 是否使用前一次调用的解决方案作为初始化。presort
: 是否预先对数据进行排序以加速查找最佳划分。ccp_alpha
: 复杂度参数,用于控制正则化。
方法和属性
fit(X, y)
: 使用 X 和 y 的数据训练模型。predict(X)
: 使用模型预测 X 的目标值。predict_proba(X)
: 预测 X 的目标概率分布。对于回归任务,这通常不是必需的。get_params(deep=True)
: 获取模型参数。set_params(**params)
: 设置模型参数。feature_importances_
: 特征重要性。
例子和打印结果
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
# 创建模拟数据
X, y = make_regression(n_samples=100, n_features=1, noise=0.1)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建并训练模型
gb_reg = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=1, random_state=42)
gb_reg.fit(X_train, y_train)
# 打印训练集上的得分
print("Training set score:", gb_reg.score(X_train, y_train))
# 打印测试集上的得分
print("Test set score:", gb_reg.score(X_test, y_test))
XGBoost库
您可能是想引用 xgboost
库中的 XGBRegressor
或 XGBClassifier
类,它们分别是用于回归和分类的 XGBoost 模型。XGBoost
是一个独立的库,而不是 scikit-learn
的一部分,尽管它提供了一个与 scikit-learn
兼容的接口。
首先,请确保您已经安装了 xgboost
库。如果尚未安装,可以使用以下命令进行安装:
pip install xgboost
以下是 XGBRegressor
的简要概述:
XGBRegressor
是 XGBoost 库中用于回归问题的类。它实现了基于梯度提升决策树的回归算法,提供了高效、灵活且可扩展的机器学习模型。
函数签名
xgboost.XGBRegressor(
learning_rate=0.1,
n_estimators=100,
max_depth=3,
min_child_weight=1,
gamma=0,
subsample=1,
colsample_bytree=1,
colsample_bylevel=1,
reg_alpha=0,
reg_lambda=1,
scale_pos_weight=1,
base_score=0.5,
random_state=0,
seed=None,
missing=None,
**kwargs
)
返回值
XGBRegressor
的构造函数返回一个训练好的 XGBoost 回归模型对象。
参数解释
learning_rate
: 学习率。n_estimators
: 提升的树的数量。max_depth
: 树的最大深度。min_child_weight
: 子叶节点中最小的样本权重和。gamma
: 在树的叶子节点上进一步划分所需的最小损失减少。subsample
: 用于训练模型的子样本比例。colsample_bytree
: 构建每棵树时使用的特征的子样本比例。colsample_bylevel
: 用于每一层的特征的子样本比例。reg_alpha
: L1 正则化项。reg_lambda
: L2 正则化项。scale_pos_weight
: 正样本的权重,用于平衡正负样本。base_score
: 模型的初始预测分数。random_state
和seed
: 随机数种子。missing
: 缺失值的默认值。**kwargs
: 其他关键字参数。
方法
fit(X, y, sample_weight=None, eval_set=None, eval_metric=None, early_stopping_rounds=None, verbose=True)
: 训练模型。predict(X)
: 使用模型进行预测。get_booster()
: 获取底层的 Booster 对象。get_xgb_params()
: 获取当前参数的字典。set_params(**params)
: 设置模型参数。
属性
feature_importances_
: 特征重要性。
例子和打印结果
import xgboost as xgb
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
# 创建模拟数据
X, y = make_regression(n_samples=100, n_features=1, noise=0.1)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建并训练模型
xgb_reg = xgb.XGBRegressor(
learning_rate=0.1,
n_estimators=100,
max_depth=3,
min_child_weight=1,
gamma=0,
subsample=0.8,
colsample_bytree=0.8,
random_state=42
)
xgb_reg.fit(X_train, y_train)
# 打印训练集上的得分
print("Training set R^2:", xgb_reg.score(X_train, y_train))
# 打印测试集上的得分
print("Test set R^2:", xgb_reg.score(X_test, y_test))
# 打印特征重要性
print("Feature importances:", xgb_reg.feature_importances_)
# 使用模型进行预测
y_pred = xgb_reg.predict(X_test)
# 打印预测结果(部分)
print("Predictions (first 5 values):", y_pred[:5])
# 假设你想看到模型的一些内部参数
print("Booster type:", xgb_reg.get_booster().get_parameter('booster'))
# 如果你想查看所有参数
params = xgb_reg.get_xgb_params()
print("All parameters:", params)
# 如果你想设置新的参数
xgb_reg.set_params(max_depth=4)
print("Updated max_depth:", xgb_reg.get_params()['max_depth'])
打印结果(假设)
假设训练集和测试集都是很好的代表,并且模型参数设置得当,你可能会看到类似以下的输出:
Training set R^2: 0.98
Test set R^2: 0.95
Feature importances: [0.7]
Predictions (first 5 values): [1.2345, 1.5678, 1.1234, 1.7890, 1.3456]
Booster type: gbtree
All parameters: {'learning_rate': 0.1, 'n_estimators': 100, 'max_depth': 4, 'min_child_weight': 1, 'gamma': 0, 'subsample': 0.8, 'colsample_bytree': 0.8, 'colsample_bylevel': 1, 'reg_alpha': 0, 'reg_lambda': 1, 'scale_pos_weight': 1, 'base_score': 0.5, 'random_state': 42, 'missing': None, 'silent': True, 'objective': 'reg:squarederror', 'eval_metric': 'rmse', 'booster': 'gbtree'}
Updated max_depth: 4
请注意,实际的输出值将取决于你的数据集、模型参数以及训练过程中的随机性。上述结果仅作为示例,实际结果可能会有所不同。此外,如果你使用了早停(early_stopping_rounds
),则训练可能会在达到某个性能阈值后提前停止,这也会影响模型的性能和输出。
LightGBM 库
LightGBM
是一个梯度提升框架,它使用基于树的学习算法。LightGBM
提供了一个快速、分布式、高性能的梯度提升(Gradient Boosting)框架,可用于排名、分类和许多其他机器学习任务。
LightGBM 的作用
LightGBM
的主要作用是提供一个易于使用、高效且可扩展的机器学习库,它特别适用于大规模数据集和高维特征空间。它支持多种学习任务,包括回归、分类和排序。
函数签名
LightGBM
通常通过其训练函数 train
来进行模型训练,其函数签名可能因版本和具体使用方式而异,但通常包含以下关键参数:
import lightgbm as lgb
params = {
'boosting_type': 'gbdt',
'objective': 'binary',
'metric': 'binary_logloss',
'num_leaves': 31,
'learning_rate': 0.05,
'feature_fraction': 0.9,
'bagging_fraction': 0.8,
'bagging_freq': 5,
'verbose': 0
}
data = lgb.Dataset(X_train, y_train)
model = lgb.train(params, data, num_boost_round=100)
返回值
lgb.train
函数返回一个训练好的 Booster
对象,该对象包含了训练得到的模型以及可以进行预测、特征重要性查看等操作的方法。
详细的参数解释
boosting_type
: 指定提升类型,如 ‘gbdt’, ‘dart’, ‘goss’ 等。objective
: 指定学习任务和相应的学习目标,如 ‘binary’, ‘multiclass’, ‘regression’ 等。metric
: 评估模型性能的指标,如 ‘binary_logloss’, ‘auc’, ‘rmse’ 等。num_leaves
: 每棵树的最大叶子节点数。learning_rate
: 学习率,控制每步更新的步长。feature_fraction
: 用于构建每棵树的特征子集的比例。bagging_fraction
: 用于训练每棵树的样本子集的比例。bagging_freq
: 执行 bagging 的频率,即 k 轮训练后进行一次 bagging。verbose
: 控制日志输出的详细程度。
详细的方法
predict(data, num_iteration=None, raw_score=False, pred_contrib=False, pred_leaf=False, data_has_header=False, is_reshape=True, **kwargs)
: 使用模型进行预测。feature_importance()
: 获取特征重要性。save_model(filename)
: 保存模型到文件。load_model(filename)
: 从文件加载模型。
详细的属性
feature_name_
: 特征名称列表。feature_importance_
: 特征重要性列表。
参数应用例子及展示打印结果
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
# 加载数据
data = load_breast_cancer()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 设置 LightGBM 参数
params = {
'boosting_type': 'gbdt',
'objective': 'binary',
'metric': 'binary_logloss',
'num_leaves': 31,
'learning_rate': 0.05,
'feature_fraction': 0.9,
'bagging_fraction': 0.8,
'bagging_freq': 5,
'verbose': 1
}
# 创建数据集
lgb_train = lgb.Dataset(X_train, y_train)
lgb_eval = lgb.Dataset(X_test, y_test, reference=lgb_train)
# 训练模型
model = lgb.train(params, lgb_train, num_boost_round=100, valid_sets=lgb_eval, early_stopping_rounds=5)
# 打印特征重要性
print("Feature importances:", model.feature_importance_)
# 进行预测
y_pred = model.predict(X_test)
print("Predictions (first 5 values):", y_pred[:5])
# 保存模型
model.save_model('lightgbm_model.txt')
# 加载模型
loaded_model = lgb.Booster(model_file='lightgbm_model.txt')
# 使用加载的模型进行预测
loaded_predictions = loaded_model.predict(X_test)
print("Loaded model predictions (first 5 values):", loaded_predictions[:5])
# 打印模型参数
print("Model parameters:", model.params)
# 打印训练过程中的评估结果
print("Evaluation results during training:", model.best_score['valid_0']['binary_logloss'])
# 打印训练过程中的迭代次数
print("Number of iterations:", model.best_iteration)
sklearn.svm
SVC(Support Vector Classification)
在 scikit-learn 中,支持向量机(SVM)的分类器是 sklearn.svm.SVC
(Support Vector Classification)。以下是关于 SVC
的详细信息:
函数签名:
sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='scale', coef0=0.0, shrinking=True, probability=False, tol=1e-3, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape='ovr', break_ties=False, random_state=None)
参数解释:
C
: 惩罚参数,控制误差项的权重。较小的 C 值会导致更宽松的决策边界,较大的 C 值会导致更严格的决策边界。默认为 1.0。kernel
: 核函数类型,可以是 ‘linear’(线性核)、‘poly’(多项式核)、‘rbf’(径向基核)等。默认为 ‘rbf’。 (rbf就是高斯核函数?)degree
: 多项式核函数的次数(仅当kernel
为 ‘poly’ 时有效)。默认为 3。gamma
: 核函数的系数,控制支持向量的影响范围。可以是 ‘scale’(默认,根据特征数量自动选择)、‘auto’(与 ‘scale’ 相同)、或一个具体的值。较小的 gamma 值会导致支持向量影响范围较大,较大的 gamma 值会导致支持向量影响范围较小。coef0
: 核函数中的独立项。仅对 ‘poly’ 和 ‘sigmoid’ 核有效。默认为 0.0。shrinking
: 是否使用收缩启发式。默认为 True。probability
: 是否启用概率估计。如果为 True,则模型会计算每个类别的概率。默认为 False。tol
: 收敛容忍度。当模型的训练误差减小到此值以下时停止训练。默认为 1e-3。cache_size
: 核矩阵的缓存大小(以 MB 为单位)。默认为 200。class_weight
: 每个类别的权重。可以是字典、‘balanced’ 或 None。默认为 None。verbose
: 是否启用详细输出。默认为 False。max_iter
: 模型的最大迭代次数。默认为 -1,表示无限制。decision_function_shape
: 决策函数的形状,可以是 ‘ovo’(一对一)或 ‘ovr’(一对多)。默认为 ‘ovr’。break_ties
: 当决策函数输出的置信度相同时,是否通过优先选择第一个类别来打破平局。默认为 False。random_state
: 控制随机数生成,用于解决多分类问题的类别洗牌。可以是整数、RandomState 实例或 None。默认为 None。
返回值:
返回一个支持向量机分类器的实例。
方法:
fit(X, y, sample_weight=None)
: 用训练数据拟合模型。predict(X)
: 对数据进行分类预测。decision_function(X)
: 返回样本到决策函数超平面的距离。predict_proba(X)
: 返回每个类别的概率估计(仅在启用概率估计时可用)。score(X, y, sample_weight=None)
: 返回模型的准确率或性能度量。
属性:
support_
: 支持向量的索引。support_vectors_
: 支持向量的值。n_support_
: 每个类别的支持向量数量。dual_coef_
: 决策函数中支持向量的系数。coef_
: 特征权重,仅在线性核函数中有效。intercept_
: 决策函数中的截距。
应用例子:
from sklearn.svm import SVC
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)
# 创建支持向量机分类器并拟合数据
svc_classifier = SVC(kernel='rbf', C=1.0, gamma='scale', random_state=42)
svc_classifier.fit(X_train, y_train)
# 预测测试集
y_pred = svc_classifier.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
# 打印结果
print("Example:")
print("Predicted Labels:", y_pred)
print("Accuracy:", accuracy)
打印结果:
Example:
Predicted Labels: [1 0 2 1 1 0 1 2 1 1 2 0 0 0 0 1 2 1 1 2 0 2 0 2 2]
Accuracy: 1.0
在这个例子中,SVC
被用于对鸢尾花数据集进行分类。模型被训练并用于对测试集进行预测,最后计算了模型的准确率。
LinearSVC()
在 scikit-learn 中,sklearn.svm.LinearSVC
是用于线性支持向量分类的类。以下是关于 LinearSVC
的详细信息:
函数签名:
sklearn.svm.LinearSVC(penalty='l2', loss='squared_hinge', dual=True, tol=1e-4, C=1.0, multi_class='ovr', fit_intercept=True, intercept_scaling=1, class_weight=None, verbose=0, random_state=None, max_iter=1000)
参数解释:
penalty
: 正则化项,可以是 ‘l1’ 或 ‘l2’。默认为 ‘l2’。loss
: 损失函数,可以是 ‘hinge’ 或 ‘squared_hinge’。默认为 ‘squared_hinge’。dual
: 是否使用对偶优化问题。对于样本数量大于特征数量的情况,建议将其设置为 False。默认为 True。tol
: 收敛容忍度。当模型的训练误差减小到此值以下时停止训练。默认为 1e-4。C
: 惩罚参数,控制误差项的权重。较小的 C 值会导致更宽松的决策边界,较大的 C 值会导致更严格的决策边界。默认为 1.0。multi_class
: 多类别分类策略,可以是 ‘ovr’(一对多)或 ‘crammer_singer’(Crammer-Singer 方法)。默认为 ‘ovr’。fit_intercept
: 是否拟合截距。默认为 True。intercept_scaling
: 截距的缩放因子。默认为 1。class_weight
: 类别权重,可以是字典、‘balanced’ 或 None。默认为 None。verbose
: 是否启用详细输出。默认为 0。random_state
: 控制随机数生成。可以是整数、RandomState 实例或 None。默认为 None。max_iter
: 模型的最大迭代次数。默认为 1000。
返回值:
返回一个 LinearSVC 分类器的实例。
方法:
fit(X, y)
: 用训练数据拟合模型。predict(X)
: 对数据进行分类预测。score(X, y)
: 返回模型的准确率或性能度量。
属性:
coef_
: 特征权重。intercept_
: 截距。classes_
: 类别标签。n_iter_
: 实际迭代次数。
应用例子:
from sklearn.svm import LinearSVC
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris['data'][:, (2, 3)] # 只取后两个特征
y = iris['target']
# 为了简化演示,把三分类任务改为二分类任务,前两个类别合并为一类
setosa_or_versicolor = (y == 0) | (y == 1)
X = X[setosa_or_versicolor]
y = y[setosa_or_versicolor]
# 创建 LinearSVC 分类器并拟合数据
linear_svc_classifier = LinearSVC(random_state=42)
linear_svc_classifier.fit(X, y)
# 预测测试集
y_pred = linear_svc_classifier.predict(X)
# 计算准确率
accuracy = accuracy_score(y, y_pred)
# 打印结果
print("Example:")
print("Predicted Labels:", y_pred)
print("Accuracy:", accuracy)
打印结果:
Example:
Predicted Labels: [1 0 0 0 1 0 1 0 1 1 1 0 1 1 1 1 1 1 1 0 1 0 1 1 0 1 0 1 1 0 0 1 0 0 1 0 0 1 1 1 0 1 1 1 1 0 0 0 1 1 0 1 0 1 1 0 1 1 0 1 1 1 1 1 1 1 0 1 0 1 1 1 0 1 0 1 1 0 1 0 1 1 1 0 1 1 1 1 1 0 0 1 1 0 0