
在使用 Sklearn 进行机器学习时需要了解一些基础的概念。Sklearn 提供了一种统一且简洁的 API 来实现各种机器学习算法和流程能够帮助我们快速实现各种机器学习任务。接下来我们从以下几个概念展开说明数据表示、模型类型、预处理方法、评估指标、模型调优等。1、数据表示数据集和特征数据集是 Sklearn 最基本的概念之一。机器学习的核心任务是从数据中学习模式数据的表示方式至关重要。数据集Dataset在 scikit-learn 中数据通常通过两个主要的对象来表示 特征矩阵 和 目标向量。特征矩阵Feature Matrix每一行代表一个数据样本每一列代表一个特征即输入变量。它是一个二维的数组或矩阵通常使用 NumPy 数组或 pandas DataFrame 来存储。假设我们有 3 个样本每个样本有 2 个特征。实例import numpy as npX np.array([[1.0, 2.0], [2.0, 3.0], [3.0, 4.0]])目标向量Target Vector它表示每个样本的目标即输出标签通常是一个一维数组。例如在分类任务中目标是每个样本的类别标签。对应的目标向量:y np.array([0, 1, 0]) # 0 类别和 1 类别特征和标签特征Features是数据集中用于训练模型的输入变量。在上面的例子中X是特征矩阵包含了所有的输入变量。标签Labels是机器学习模型的目标输出。在监督学习中标签是我们希望模型预测的结果。在上面的例子中y是标签或目标向量包含了每个样本的类别。数据集分割在实际应用中通常需要将数据集分割成训练集和测试集。scikit-learn 提供了一个方便的函数 train_test_split() 来实现这一点实例from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test train_test_split(X, y, test_size0.3, random_state42)以上代码调用train_test_split函数并将结果赋值给四个变量X_train、X_test、y_train和y_test。X和y是传入train_test_split函数的参数它们分别代表特征数据集和目标变量标签。通常X是一个二维数组y是一个一维数组。test_size0.3参数指定了测试集的大小应该是原始数据集的 30%。这意味着 70% 的数据将被用作训练集剩下的 30% 将被用作测试集。random_state42参数是一个随机数种子用于确保每次分割数据集时都能得到相同的结果。这在实验和模型验证中非常有用因为它确保了结果的可重复性。2、模型与算法监督学习和无监督学习在 scikit-learn 中机器学习模型大致分为两大类监督学习 和 无监督学习。监督学习Supervised Learning在监督学习中模型在训练时会利用带标签的数据进行学习这些标签是我们希望模型预测的结果。常见的监督学习任务包括分类和回归。分类Classification将数据点分配到预定的类别中。例如判断邮件是垃圾邮件还是非垃圾邮件。回归Regression预测连续值输出。例如预测房价、气温等。使用决策树进行分类任务实例from sklearn.tree import DecisionTreeClassifierclf DecisionTreeClassifier()clf.fit(X_train, y_train)y_pred clf.predict(X_test)无监督学习Unsupervised Learning无监督学习是指没有标签数据模型仅通过输入数据本身的特征进行学习。常见的无监督学习任务包括聚类和降维。聚类Clustering将数据分组使得同一组中的数据具有相似性。常见的聚类算法包括K-Means、DBSCAN等。降维Dimensionality Reduction减少数据中的特征数量通常用于数据压缩或可视化。常见的降维方法有PCA主成分分析和t-SNEt-分布随机邻域嵌入等。使用 K-Means 聚类实例from sklearn.cluster import KMeanskmeans KMeans(n_clusters3)kmeans.fit(X_train)y_pred kmeans.predict(X_test)预处理与特征工程在使用 scikit-learn 进行机器学习之前通常需要对数据进行预处理这包括以下几项常见任务1、标准化Standardization特征的尺度统一使得每个特征都具有零均值和单位方差。实例from sklearn.preprocessing import StandardScalerscaler StandardScaler()X_scaled scaler.fit_transform(X)2、归一化Normalization将特征的值缩放到一个固定范围通常是 0 到 1。实例from sklearn.preprocessing import MinMaxScalerscaler MinMaxScaler()X_normalized scaler.fit_transform(X)3、类别变量编码将类别型数据转换为数值型数据如 one-hot 编码。3、模型评估与验证在训练机器学习模型之后必须评估其性能以确保其泛化能力。scikit-learn 提供了一些评估模型性能的工具。交叉验证Cross-validation交叉验证是一种常见的模型评估方法尤其是在数据量有限的情况下。通过将数据分成多个子集每次使用一个子集作为验证集其余作为训练集重复多次训练和评估模型最终计算模型的平均性能。实例from sklearn.model_selection import cross_val_scorescores cross_val_score(clf, X, y, cv5) # 5-fold cross-validationprint(Cross-validation scores:, scores)常见评估指标分类任务的评估指标准确率Accuracy预测正确的样本占所有样本的比例。精确率Precision正类预测中实际正类的比例。召回率Recall实际正类中正确预测的比例。F1 分数精确率和召回率的调和平均数。实例from sklearn.metrics import accuracy_score, classification_reportprint(Accuracy:, accuracy_score(y_test, y_pred))print(Classification Report:\n, classification_report(y_test, y_pred))回归任务的评估指标均方误差MSE预测值与真实值的平方差的平均值。决定系数R²衡量模型对数据变异的解释能力。实例from sklearn.metrics import mean_squared_error, r2_scoreprint(MSE:, mean_squared_error(y_test, y_pred))print(R²:, r2_score(y_test, y_pred))4、模型选择与调优网格搜索Grid Search网格搜索是一种常用的超参数调优方法它通过遍历所有可能的参数组合来寻找最佳的超参数组合。实例from sklearn.model_selection import GridSearchCVparam_grid {max_depth: [3, 5, 7], min_samples_split: [2, 5, 10]}grid_search GridSearchCV(DecisionTreeClassifier(), param_grid, cv5)grid_search.fit(X_train, y_train)print(Best parameters:, grid_search.best_params_)随机搜索Random Search随机搜索是一种通过随机选择超参数的组合来搜索最优超参数的方法它比网格搜索效率高。实例from sklearn.model_selection import RandomizedSearchCVfrom scipy.stats import randintparam_dist {max_depth: [3, 5, 7], min_samples_split: randint(2, 10)}random_search RandomizedSearchCV(DecisionTreeClassifier(), param_dist, n_iter10, cv5)random_search.fit(X_train, y_train)print(Best parameters:, random_search.best_params_)