1、相关库包
https://www.lanqiao.cn/problems/8755/learning/?contest_id=156
# 导入所需的库
from sklearn.feature_extraction.text import CountVectorizer # 用于文本特征提取
from sklearn.linear_model import LogisticRegression # 用于构建逻辑回归分类模型
from sklearn.model_selection import cross_val_score # 用于交叉验证评估模型性能
scikit-learn是sklearn的全称。 Vector/ˈvektə(r)/ 矢量,向量;单行矩阵,单列矩阵;(计算机)模型 sizer/ˈsaɪzə(r)/大小分拣器;选别器;筛选器 count统计 extraction/ɪkˈstrækʃn/ n.取出,提炼;血统
\sklearn.feature_extraction
是scikit-learn
库中的一个模块,它提供了多种特征提取的方法。这个模块包含了许多类和函数,用于从原始数据中提取特征,以便于后续的机器学习任务。以下是一些主要的子模块和类:
文本特征提取 (
sklearn.feature_extraction.text
):
CountVectorizer
: 将文本数据转换为词频向量(词袋模型)。TfidfVectorizer
: 将文本数据转换为TF-IDF向量。HashingVectorizer
: 使用哈希技巧将文本数据转换为词频向量,不需要事先构建词汇表。TfidfTransformer
: 对已有的词频向量应用TF-IDF变换。图像特征提取 (
sklearn.feature_extraction.image
):
PatchExtractor
: 从图像中提取补丁(图像的一部分)。img_to_graph
: 将图像转换为图结构,其中像素或区域被视为节点。grid_to_graph
: 将图像的网格结构转换为图结构。特征哈希 (
sklearn.feature_extraction
):
FeatureHasher
: 使用哈希技巧将特征转换为哈希值,适用于大规模特征的数据集。字典学习 (
sklearn.feature_extraction.dict_learning
):
DictVectorizer
: 将字典列表转换为 scipy.sparse 矩阵。DictionaryLearning
: 用于字典学习,即将数据表示为字典中的原子信号的稀疏线性组合。MiniBatchDictionaryLearning
: DictionaryLearning 的迷你批处理版本,适用于大规模数据集。特征量化 (
sklearn.feature_extraction.text
):
VectorQuantizer
: 用于量化特征,将连续特征值转换为离散的量化值。随机投影 (
sklearn.feature_extraction.random_projection
):
- 提供了多种方法,用于将高维数据投影到低维空间,同时尽量保持数据结构。
这些类和函数可以用于各种数据类型(如文本、图像、结构化数据等)的特征提取任务。使用这些工具可以帮助你将原始数据转换为适合机器学习模型的形式,从而提高模型的性能和准确性。
在
scikit-learn
中,CountVectorizer
是一个用于文本数据的特征提取器,它将文本转换为词频向量。这里的.text
并不是指一个特定的类或方法,而是指CountVectorizer
位于sklearn.feature_extraction.text
子模块中。这个子模块专门用于处理文本数据,提供了一些工具来进行文本的特征提取。当你看到
from sklearn.feature_extraction.text import CountVectorizer
这行代码时,它意味着:
sklearn
是scikit-learn
库的缩写。feature_extraction
是scikit-learn
库中用于特征提取的模块。text
是feature_extraction
模块中专门处理文本数据的子模块。CountVectorizer
是从sklearn.feature_extraction.text
子模块中导入的一个类,用于将文本数据转换为词频向量。
from sklearn.feature_extraction.text import CountVectorizer
这行代码的作用是导入 CountVectorizer
类,以便在当前的Python脚本或模块中使用它来处理文本数据,将文本转换为机器学习算法可以理解的数值特征。
linear/ˈlɪniə(r)/线性的
sklearn.linear_model
是scikit-learn
库中的一个模块,它提供了多种线性模型供我们在机器学习任务中使用。线性模型是一类基于线性假设的模型,广泛应用于回归、分类和维度缩减等任务。以下是sklearn.linear_model
中一些主要的模型和工具:
普通最小二乘法(Ordinary Least Squares):
LinearRegression
: 用于回归任务,通过最小化数据点到回归直线的距离之和来找到最佳拟合直线。岭回归(Ridge Regression):
Ridge
: 通过引入L2正则化来处理多重共线性问题,适用于回归任务。套索回归(Lasso Regression):
Lasso
: 通过引入L1正则化来提高模型的泛化能力,并自动进行特征选择,适用于回归任务。弹性网络(Elastic Net):
ElasticNet
: 结合了岭回归和套索回归的特点,通过L1和L2正则化来提高模型的泛化能力。逻辑回归(Logistic Regression):
LogisticRegression
: 用于分类任务,通过最大化对数似然函数来估计参数,可以处理二分类和多分类问题。线性判别分析(Linear Discriminant Analysis):
LinearDiscriminantAnalysis
: 用于分类任务,通过寻找最大化类间散射和最小化类内散射的方向来进行降维。贝叶斯回归(Bayesian Regression):
BayesianRidge
: 通过贝叶斯方法来进行回归,可以提供更稳健的估计。正则化最小二乘法(Least Angle Regression):
LARS
: 一种用于高维数据的回归方法,特别适用于特征数量远大于样本数量的情况。最小角回归(Least Angle Regression):
LassoLars
: 结合了套索回归和最小角回归的特点,适用于高维数据的特征选择。逐步回归(Stepwise Regression):
LarsCV
和LassoLarsCV
: 提供了交叉验证的版本,用于选择最佳的回归模型。这些模型和工具提供了灵活多样的选择,可以适应不同的数据集和任务需求。使用
sklearn.linear_model
可以帮助你快速实现线性模型,并对模型进行训练、评估和预测。
sklearn.model_selection
是scikit-learn
库中的一个模块,它提供了一系列用于数据预处理、模型选择和评估的工具。这个模块是进行机器学习实验和模型开发的重要部分,因为它允许你分割数据集、应用交叉验证、选择最佳参数、估计模型性能等。以下是
sklearn.model_selection
模块中一些主要的功能和工具:
数据分割:
train_test_split
: 用于将数据集分割为训练集和测试集。KFold
、StratifiedKFold
、ShuffleSplit
、GroupKFold
等: 用于进行交叉验证时将数据集分割成多个子集。交叉验证:
KFold
、StratifiedKFold
、ShuffleSplit
、GroupKFold
等: 提供了不同的交叉验证策略。cross_val_score
、cross_validate
: 用于评估模型性能,通过交叉验证来估计模型的泛化误差。参数调优:
GridSearchCV
: 用于网格搜索,通过交叉验证来找到最佳参数组合。RandomizedSearchCV
: 用于随机搜索,通过交叉验证来找到最佳参数组合。ParameterSampler
: 用于生成参数组合,通常与RandomizedSearchCV
一起使用。模型评估:
confusion_matrix
: 计算混淆矩阵,用于评估分类模型的性能。classification_report
: 生成分类报告,包括精确度、召回率、F1分数等。roc_auc_score
: 计算ROC曲线下面积,用于评估二分类模型的性能。预处理:
StandardScaler
、MinMaxScaler
、MaxAbsScaler
、Normalizer
等: 用于对特征进行缩放或标准化。PCA
、KernelPCA
: 用于降维,通过主成分分析或核主成分分析。模型选择:
StackingClassifier
、StackingRegressor
: 用于构建堆叠模型,通过组合多个模型来提高预测性能。使用
sklearn.model_selection
模块可以帮助你有效地进行机器学习实验,通过交叉验证来评估模型的泛化能力,并找到最佳参数。
交叉验证是一种统计方法,用于评估机器学习模型的性能。它的目的是通过将数据集分割成多个子集,然后使用其中一部分子集作为训练集,另一部分子集作为测试集,来估计模型的泛化能力。这种方法有助于减少过拟合的风险,因为它提供了对模型在不同数据子集上的性能的估计。
交叉验证的主要步骤如下:
数据集分割:将原始数据集分割成多个子集。这些子集的大小可能不同,但每个子集都应该足够大,以便对模型的性能提供有意义的估计。
循环:在每一次迭代中,从分割好的子集中选择一个作为测试集,其余的子集作为训练集。
模型训练:使用训练集来训练模型。
模型评估:使用测试集来评估模型的性能。这通常涉及计算模型的预测误差或性能指标,如准确度、召回率、F1分数等。
结果汇总:将所有迭代中的模型性能指标汇总,以得到对模型泛化能力的整体估计。
交叉验证可以采用不同的策略,包括:
K折交叉验证(K-fold cross-validation):将数据集分割成K个子集,每次迭代使用K-1个子集作为训练集,剩余的1个子集作为测试集。重复K次,每次使用不同的子集作为测试集。
留出法(Holdout method):将数据集分割成两个子集,一个用于训练,另一个用于测试。这种方法简单,但可能无法完全避免过拟合的风险。
留一交叉验证(Leave-One-Out Cross-Validation, LOOCV):将数据集分割成单个样本的子集,每次迭代使用除了一个样本外的所有样本作为训练集,剩余的样本作为测试集。这种方法计算量很大,但可以提供非常精确的性能估计。
交叉验证是机器学习中评估模型性能的常用方法,特别是在样本量较小的情况下。通过交叉验证,我们可以更好地理解模型在实际应用中的表现,并据此进行模型的调整和优化。
(烂尾了,比完了,不更了)