Python中的Scikit-learn库介绍:机器学习必备工具
                           
天天向上
发布: 2025-01-12 10:08:01

原创
285 人浏览过

Scikit-learn 是一个用于数据分析和机器学习的开源 Python 库,它提供了许多强大而易于使用的工具,支持各类机器学习任务,如分类、回归、聚类、降维等。它非常适合初学者以及专业人员,因其简洁的API、丰富的功能和广泛的文档支持,使其成为机器学习中的必备工具。

一、Scikit-learn概述

Scikit-learn 的设计目标是使机器学习算法的实现尽可能简单,因此提供了很多高效的工具,适用于从数据预处理到模型评估的整个机器学习流程。它依赖于其他一些重要的科学计算库,如 NumPySciPymatplotlib,这些库共同提供了高效的数据处理和分析能力。

核心功能:

  • 分类(Classification):根据输入数据预测类别标签(如垃圾邮件分类、图片识别等)。
  • 回归(Regression):根据输入数据预测数值输出(如房价预测、股票价格预测等)。
  • 聚类(Clustering):将数据分组,每一组中的数据具有相似性(如客户群体分析)。
  • 降维(Dimensionality Reduction):减少数据的特征维度,以便更好地进行可视化或提高计算效率(如PCA、t-SNE)。
  • 模型选择(Model Selection):如交叉验证、网格搜索等,用于评估和选择最佳模型。
  • 数据预处理(Preprocessing):数据的标准化、归一化、缺失值处理、特征提取等。

二、Scikit-learn的安装

要使用 Scikit-learn,可以通过以下命令进行安装:

pip install scikit-learn

三、Scikit-learn的主要模块

Scikit-learn 中的核心模块主要包含以下几个部分:

1. 数据预处理(Preprocessing)

Scikit-learn 提供了很多常用的数据预处理工具,如标准化、归一化、缺失值填充等。

  • 标准化:将数据转换为均值为0,方差为1的分布。
  from sklearn.preprocessing import StandardScaler
  scaler = StandardScaler()
  X_scaled = scaler.fit_transform(X)  # X为数据集
  • 归一化:将数据按比例缩放到指定范围(通常是 [0, 1])。
  from sklearn.preprocessing import MinMaxScaler
  scaler = MinMaxScaler()
  X_scaled = scaler.fit_transform(X)
  • 缺失值填充:使用均值、中位数或最常见的值填充缺失的数据。
  from sklearn.impute import SimpleImputer
  imputer = SimpleImputer(strategy='mean')
  X_imputed = imputer.fit_transform(X)

2. 监督学习(Supervised Learning)

Scikit-learn 提供了多种监督学习模型,包括回归和分类任务的算法。

  • 分类算法:如决策树、支持向量机(SVM)、k-近邻(KNN)、随机森林、逻辑回归等。
  • 逻辑回归(Logistic Regression): from sklearn.linear_model import LogisticRegression model = LogisticRegression() model.fit(X_train, y_train)
  • 支持向量机(SVM): from sklearn.svm import SVC model = SVC(kernel='linear') # 使用线性核 model.fit(X_train, y_train)
  • 决策树(Decision Tree): from sklearn.tree import DecisionTreeClassifier model = DecisionTreeClassifier() model.fit(X_train, y_train)
  • 回归算法:如线性回归、岭回归、支持向量回归等。
  • 线性回归(Linear Regression): from sklearn.linear_model import LinearRegression model = LinearRegression() model.fit(X_train, y_train)
  • 支持向量回归(SVR): from sklearn.svm import SVR model = SVR(kernel='linear') model.fit(X_train, y_train)

3. 无监督学习(Unsupervised Learning)

Scikit-learn 也支持无监督学习任务,如聚类、降维等。

  • K-均值聚类(K-means Clustering):
  from sklearn.cluster import KMeans
  model = KMeans(n_clusters=3)  # 聚类数为3
  model.fit(X)
  • 主成分分析(PCA,Principal Component Analysis)用于降维:
  from sklearn.decomposition import PCA
  pca = PCA(n_components=2)  # 将数据降到2维
  X_pca = pca.fit_transform(X)

4. 模型选择与评估(Model Selection and Evaluation)

Scikit-learn 提供了多种模型评估方法,如交叉验证、准确率、混淆矩阵等。

  • 交叉验证(Cross Validation):用于评估模型的泛化能力。
  from sklearn.model_selection import cross_val_score
  scores = cross_val_score(model, X, y, cv=5)  # 5折交叉验证
  print(scores)
  • 混淆矩阵(Confusion Matrix):用于分类模型评估,显示预测与真实标签的匹配情况。
  from sklearn.metrics import confusion_matrix
  cm = confusion_matrix(y_true, y_pred)
  print(cm)
  • 准确率、精确率、召回率、F1值
  from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
  print(accuracy_score(y_true, y_pred))
  print(precision_score(y_true, y_pred))
  print(recall_score(y_true, y_pred))
  print(f1_score(y_true, y_pred))

5. 特征选择与模型调优

  • 特征选择:帮助选择对模型有最大影响的特征。
  from sklearn.feature_selection import SelectKBest, f_classif
  selector = SelectKBest(score_func=f_classif, k=10)
  X_new = selector.fit_transform(X, y)
  • 网格搜索调参:通过网格搜索找到最优的超参数组合。
  from sklearn.model_selection import GridSearchCV
  param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf']}
  grid_search = GridSearchCV(SVC(), param_grid, cv=5)
  grid_search.fit(X_train, y_train)
  print(grid_search.best_params_)

6. Pipeline(管道)

Scikit-learn 提供了 Pipeline 类,可以将多个处理步骤和模型组合成一个可复用的流程。这样做可以减少代码冗余并提升可维护性。

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('svm', SVC())
])

pipeline.fit(X_train, y_train)

四、Scikit-learn的应用实例

1. 分类任务(鸢尾花数据集)

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# 加载数据集
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)

# 训练模型
model = SVC(kernel='linear')
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 评估
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')

2. 回归任务(波士顿房价数据集)

from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 加载数据集
data = load_boston()
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)

# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 评估
mse = mean_squared_error(y_test

, y_pred)
print(f'Mean Squared Error: {mse:.2f}')

五、总结

Scikit-learn 是机器学习领域中最常用的工具之一,具有易用的API和丰富的功能,支持从数据预处理、模型训练、评估到超参数调优的整个机器学习流程。它适合新手和专业人士,帮助你在机器学习中取得更好的成果。如果你正在学习机器学习或数据科学,掌握 Scikit-learn 将是你必备的技能之一。

发表回复 0

Your email address will not be published. Required fields are marked *