scikit-learn(简称 sklearn)是 Python 中最流行的开源机器学习库之一,基于 NumPy、SciPy 和 Matplotlib 构建。它提供了丰富的机器学习算法和工具,适用于数据挖掘和数据分析任务。以下是其核心特点的简介:
1、sklearn主要功能
-
监督学习
-
分类(如 SVM、随机森林、逻辑回归)等
-
回归(如线性回归、岭回归)等
-
-
无监督学习
-
聚类(如 K-Means、DBSCAN)等
-
降维(如 PCA、t-SNE)等
-
-
模型选择与评估
-
交叉验证、超参数调优(如网格搜索
GridSearchCV
)等 -
评估指标(如准确率、F1 分数、ROC 曲线)等
-
-
数据预处理(数据集变换)
- 标准化、归一化、缺失值处理、特征编码(如 One-Hot Encoding)等
-
工具链集成
- 流水线(
Pipeline
)支持多步骤任务(如预处理 + 建模)等
- 流水线(

2、监督学习
监督学习(Supervised Learning)是机器学习的一种范式,其目标是从带有标签的数据 中学习一个模型,用于预测未知数据的标签。它主要分为 分类(Classification) 和 回归(Regression) 两大类。以下是监督学习的核心算法及其应用场景:
2.1、分类(Classification)
预测离散类别标签(如垃圾邮件/正常邮件、图像类别等)。
2.1.1. 经典算法
-
逻辑回归(Logistic Regression)
-
用于二分类或多分类,输出概率值。
-
适用场景:线性可分问题(如信用评分、疾病预测)。
pythonfrom sklearn.linear_model import LogisticRegression model = LogisticRegression()
-
-
支持向量机(SVM, Support Vector Machine)
-
通过最大化分类间隔找到最优决策边界,可处理高维数据。
-
适用场景:小样本、高维数据(如文本分类、图像识别)。
pythonfrom sklearn.svm import SVC model = SVC(kernel='linear') # 线性核或高斯核(RBF)
-
-
决策树(Decision Tree)
-
基于树结构的规则划分,可解释性强。
-
适用场景:非线性关系数据(如客户分群、诊断决策)。
pythonfrom sklearn.tree import DecisionTreeClassifier model = DecisionTreeClassifier(max_depth=5)
-
-
随机森林(Random Forest)
-
多棵决策树的集成,降低过拟合风险。
-
适用场景:复杂非线性问题(如金融风控、推荐系统)。
pythonfrom sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier(n_estimators=100)
-
-
K近邻(K-Nearest Neighbors, KNN)
-
基于样本距离的"投票"机制,简单但计算量大。
-
适用场景:小规模数据、局部特征明显(如手写数字识别)。
pythonfrom sklearn.neighbors import KNeighborsClassifier model = KNeighborsClassifier(n_neighbors=5)
-
-
朴素贝叶斯(Naive Bayes)
-
基于贝叶斯定理,假设特征之间独立。
-
适用场景:文本分类(如垃圾邮件过滤、情感分析)。
pythonfrom sklearn.naive_bayes import GaussianNB model = GaussianNB()
-
2.1.2. 进阶方法
-
梯度提升树(如 XGBoost、LightGBM、CatBoost)
-
神经网络(如 MLPClassifier)
-
集成学习(如 VotingClassifier、Stacking)
2.2、回归(Regression)
预测连续数值(如房价、温度、销售额等)。
2.2.1. 经典算法
-
线性回归(Linear Regression)
-
拟合线性关系,可解释性强。
-
适用场景:自变量与因变量呈线性关系(如经济预测)。
pythonfrom sklearn.linear_model import LinearRegression model = LinearRegression()
-
-
岭回归(Ridge Regression)
-
在线性回归基础上加入 L2 正则化,防止过拟合。
-
适用场景:多重共线性数据。
pythonfrom sklearn.linear_model import Ridge model = Ridge(alpha=1.0)
-
-
Lasso 回归(Lasso Regression)
-
加入 L1 正则化,可进行特征选择。
-
适用场景:高维稀疏数据(如基因数据分析)。
pythonfrom sklearn.linear_model import Lasso model = Lasso(alpha=0.1)
-
-
支持向量回归(SVR, Support Vector Regression)
-
基于 SVM 的回归版本,可处理非线性问题。
-
适用场景:小样本、非线性回归(如股票价格预测)。
pythonfrom sklearn.svm import SVR model = SVR(kernel='rbf')
-
-
决策树回归(Decision Tree Regressor)
- 通过树结构划分数据区域,预测每个区域的均值。
pythonfrom sklearn.tree import DecisionTreeRegressor model = DecisionTreeRegressor()
-
随机森林回归(Random Forest Regressor)
- 多棵回归树的集成,提升预测稳定性。
pythonfrom sklearn.ensemble import RandomForestRegressor model = RandomForestRegressor()

2.3、适用场景
场景类型 | 问题示例 | 典型算法 |
---|---|---|
分类 | 垃圾邮件检测、图像分类 | SVM、随机森林、逻辑回归 |
回归 | 房价预测、销量预测 | 线性回归、梯度提升树、SVR |
3、无监督学习
无监督学习(Unsupervised Learning)是机器学习的一种范式,其目标是从无标签数据中挖掘潜在的结构或模式,无需依赖人工标注。以下是其核心方法、应用场景及典型算法的详细介绍:
3.1、核心任务类型
无监督学习主要分为以下几类任务:
-
聚类(Clustering)
将数据划分为有相似性的组(簇)。
-
降维(Dimensionality Reduction)
减少数据维度,保留重要信息。
-
关联规则(Association Rule)
发现数据中的频繁项集或关联关系。
-
异常检测(Anomaly Detection)
识别数据中的异常点或离群值。
3.2、主要算法与实现
3.2.1. 聚类(Clustering)
-
K-Means
-
通过迭代将数据划分到K个簇中,以最小化簇内平方误差。
-
适用场景:客户分群、图像压缩(颜色量化)。
-
代码示例(sklearn):
pythonfrom sklearn.cluster import KMeans model = KMeans(n_clusters=3) clusters = model.fit_predict(X)
-
-
DBSCAN
-
基于密度划分簇,可发现任意形状的簇并识别噪声点。
-
适用场景:地理空间数据聚类(如地震点分布)、异常检测。
-
代码示例:
pythonfrom sklearn.cluster import DBSCAN model = DBSCAN(eps=0.5, min_samples=5) clusters = model.fit_predict(X)
-
-
层次聚类(Hierarchical Clustering)
-
构建树状结构(树状图)划分簇,适合多粒度分析。
-
适用场景:生物基因分类、文档主题分层。
-
-
高斯混合模型(GMM)
-
假设数据服从多个高斯分布的混合,用概率模型划分簇。
-
适用场景:语音信号分离、图像分割。
-
3.2.2. 降维(Dimensionality Reduction)
-
主成分分析(PCA)
-
通过正交变换将数据投影到低维空间,保留最大方差。
-
适用场景:可视化高维数据(如基因表达数据降维到2D)、去噪。
-
代码示例:
pythonfrom sklearn.decomposition import PCA pca = PCA(n_components=2) X_reduced = pca.fit_transform(X)
-
-
t-SNE
-
非线性降维,适合保留局部结构,常用于可视化。
-
适用场景:高维数据探索(如MNIST手写数字可视化)。
-
-
UMAP
-
类似t-SNE但计算效率更高,同时保留全局和局部结构。
-
适用场景:单细胞RNA测序数据分析。
-
3.2.3. 关联规则(Association Rule)
-
Apriori算法
-
发现频繁项集(如购物篮分析中的商品组合)。
-
适用场景:零售商品推荐(如"啤酒与尿布"关联)。
-
代码示例(mlxtend库):
pythonfrom mlxtend.frequent_patterns import apriori frequent_itemsets = apriori(df, min_support=0.1, use_colnames=True)
-
-
FP-Growth算法
-
比Apriori更高效,通过树结构压缩数据。
-
适用场景:大规模交易数据分析。
-
3.2.4. 异常检测(Anomaly Detection)
-
孤立森林(Isolation Forest)
-
通过随机划分树快速隔离异常点(异常点路径更短)。
-
适用场景:金融欺诈检测、工业设备故障预警。
-
代码示例:
pythonfrom sklearn.ensemble import IsolationForest model = IsolationForest(contamination=0.01) anomalies = model.fit_predict(X)
-
-
LOF(局部离群因子)
-
基于密度的异常检测,适合局部稀疏区域识别。
-
适用场景:网络入侵检测、传感器异常值识别。
-

3.3、适用场景
场景类型 | 问题示例 | 典型算法 |
---|---|---|
聚类 | 客户分群、社交网络社区发现 | K-Means、DBSCAN、层次聚类 |
降维 | 图像压缩、特征工程预处理 | PCA、t-SNE、UMAP |
关联规则 | 购物篮分析、广告投放策略优化 | Apriori、FP-Growth |
异常检测 | 信用卡欺诈检测、设备故障预警 | 孤立森林、LOF |
4、模型评估
模型评估是机器学习流程中的关键环节,其目的是衡量模型的性能和泛化能力。以下是针对不同任务类型(分类、回归、聚类等)的评估方法及核心指标详解:
4.1、分类任务评估
4.1.1. 基础指标
-
准确率(Accuracy)
-
公式:正确预测样本数 / 总样本数
-
代码:
sklearn.metrics.accuracy_score(y_true, y_pred)
-
适用场景:类别均衡时有效,但类别不平衡时易误导(如99%负样本时,全预测负类准确率99%)。
-
-
混淆矩阵(Confusion Matrix)
-
可视化模型预测结果的四象限矩阵(TP、TN、FP、FN)。
-
代码:
sklearn.metrics.confusion_matrix
-
-
精确率(Precision)
-
公式:TP / (TP + FP)
-
意义:预测为正的样本中实际为正的比例(减少误报)。
-
适用场景:注重减少FP(如垃圾邮件分类中避免误判正常邮件)。
-
-
召回率(Recall)
-
公式:TP / (TP + FN)
-
意义:实际为正的样本中被正确预测的比例(减少漏报)。
-
适用场景:注重减少FN(如疾病诊断中避免漏诊)。
-
-
F1分数(F1 Score)
-
公式:2 * (Precision * Recall) / (Precision + Recall)
-
意义:精确率和召回率的调和平均,平衡二者。
-
代码:
sklearn.metrics.f1_score
-
4.2、回归任务评估
4.21. 核心指标
-
均方误差(MSE, Mean Squared Error)
-
公式:Σ(y_pred - y_true)^2 / n
-
代码:
sklearn.metrics.mean_squared_error
-
特点:对异常值敏感(平方放大误差)。
-
-
均方根误差(RMSE)
-
公式:√MSE
-
意义:与目标变量单位一致,更易解释。
-
-
平均绝对误差(MAE)
-
公式:Σ|y_pred - y_true| / n
-
代码:
sklearn.metrics.mean_absolute_error
-
特点:对异常值鲁棒性强。
-
-
R²分数(决定系数)
-
公式:1 - (残差平方和) / (总平方和)
-
范围:(-∞, 1],越接近1模型越好。
-
代码:
sklearn.metrics.r2_score
-
4.3、聚类任务评估
4.3.1. 有标签评估
-
调整兰德指数(Adjusted Rand Index, ARI)
-
衡量聚类结果与真实标签的相似性,值越接近1越好。
-
代码:
sklearn.metrics.adjusted_rand_score
-
-
归一化互信息(NMI, Normalized Mutual Information)
-
基于信息论衡量聚类与真实标签的关联性。
-
代码:
sklearn.metrics.normalized_mutual_info_score
-
4.3.2. 无标签评估
-
轮廓系数(Silhouette Coefficient)
-
公式:(b - a) / max(a, b)
-
a
:样本与同簇其他样本的平均距离 -
b
:样本与最近其他簇样本的平均距离
-
-
范围:[-1, 1],值越大聚类效果越好。
-
代码:
sklearn.metrics.silhouette_score
-

5、数据集变换
数据集变换是机器学习流程中的核心步骤,旨在将原始数据转化为适合模型训练的格式,提升模型性能和稳定性。以下是数据集变换的核心方法、工具及实践指南:
5.1、数据清洗(可参考数据预处理文章)
5.1.1. 处理缺失值
-
删除缺失样本/特征
-
适用场景:缺失比例高(如>80%)且对目标无显著影响。
-
代码:
pythondf.dropna(axis=0, how='any') # 删除含缺失值的行 df.drop(columns=['feature_name'], inplace=True) # 删除某列
-
-
填充缺失值
-
均值/中位数填充:适合数值型特征(如年龄、收入)。
pythonfrom sklearn.impute import SimpleImputer imputer = SimpleImputer(strategy='median') X_filled = imputer.fit_transform(X)
-
众数填充:适合分类特征(如性别、职业类别)。
-
插值法:时间序列数据(如线性插值、样条插值)。
-
-
模型预测填充
- 用其他特征预测缺失值(如用KNN回归)。
pythonfrom sklearn.impute import KNNImputer imputer = KNNImputer(n_neighbors=3) X_filled = imputer.fit_transform(X)
5.1.2. 处理异常值
-
统计方法
-
Z-Score法:将绝对值大于3的值视为异常。
pythonfrom scipy.stats import zscore z_scores = zscore(X['feature']) outliers = (np.abs(z_scores) > 3)
-
IQR法:定义异常值为低于Q1-1.5IQR或高于Q3+1.5IQR。
-
-
模型方法
- 使用孤立森林(Isolation Forest)或LOF算法检测异常点。
5.2、特征编码
5.2.1. 分类特征编码
-
标签编码(Label Encoding)
-
将类别转换为整数(如"红/绿/蓝" → 0/1/2)。
-
适用场景:有序分类变量(如学历等级)。
pythonfrom sklearn.preprocessing import LabelEncoder encoder = LabelEncoder() X['color'] = encoder.fit_transform(X['color'])
-
-
独热编码(One-Hot Encoding)
-
将类别转换为二进制向量(如"红" → [1,0,0])。
-
适用场景:无序分类变量(如城市名称)。
pythonfrom sklearn.preprocessing import OneHotEncoder encoder = OneHotEncoder(sparse=False) encoded_features = encoder.fit_transform(X[['color']])
-
-
目标编码(Target Encoding)
- 用目标变量的均值对类别编码(需防止过拟合)。
pythonfrom category_encoders import TargetEncoder encoder = TargetEncoder() X['city_encoded'] = encoder.fit_transform(X['city'], y)
5.2.2. 文本特征编码
-
词袋模型(Bag of Words)
- 统计词频生成稀疏矩阵。
pythonfrom sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer() X_text = vectorizer.fit_transform(text_data)
-
TF-IDF
- 衡量词的重要性(词频-逆文档频率)。
pythonfrom sklearn.feature_extraction.text import TfidfVectorizer vectorizer = TfidfVectorizer() X_tfidf = vectorizer.fit_transform(text_data)
5.3、特征缩放
5.3.1. 标准化(Standardization)
-
将数据转换为均值为0、标准差为1的分布。
-
适用场景:大多数算法(如SVM、神经网络)。
python
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
5.3.2. 归一化(Normalization)
-
将数据缩放到[0,1]或[-1,1]区间。
-
适用场景:图像像素值、无显著异常值的数据。
python
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))
X_normalized = scaler.fit_transform(X)
5.3.3. 鲁棒缩放(Robust Scaling)
- 使用中位数和四分位数缩放,降低异常值影响。
python
from sklearn.preprocessing import RobustScaler
scaler = RobustScaler()
X_robust = scaler.fit_transform(X)
5.4、特征构造
5.4.1. 数值特征衍生
-
多项式特征:生成特征间的交互项。
pythonfrom sklearn.preprocessing import PolynomialFeatures poly = PolynomialFeatures(degree=2, include_bias=False) X_poly = poly.fit_transform(X)
-
分箱(Binning):将连续变量离散化(如年龄分段为青年/中年/老年)。
pythonimport pandas as pd df['age_bin'] = pd.cut(df['age'], bins=[0, 18, 35, 60, 100], labels=['child', 'young', 'adult', 'senior'])
5.4.2. 时间特征处理
-
提取年、月、日、星期几等时间成分。
-
计算时间差(如用户注册至今的天数)。
5.4.3. 文本特征提取
- 提取词性(POS)、命名实体(NER)等高级语义特征。
5.5、降维与特征选择
5.5.1. 主成分分析(PCA)
- 通过线性变换保留最大方差的方向。
python
from sklearn.decomposition import PCA
pca = PCA(n_components=0.95) # 保留95%方差
X_pca = pca.fit_transform(X_scaled)
5.5.2. 特征重要性筛选
- 基于树模型(如随机森林)评估特征重要性。
python
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
model.fit(X, y)
importance = model.feature_importances_
5.5.3. 递归特征消除(RFE)
- 递归删除不重要的特征。
python
from sklearn.feature_selection import RFE
selector = RFE(estimator=LogisticRegression(), n_features_to_select=10)
X_selected = selector.fit_transform(X, y)
5.6、处理不平衡数据
5.6.1. 过采样(Oversampling)
-
SMOTE:生成少数类合成样本。
pythonfrom imblearn.over_sampling import SMOTE smote = SMOTE() X_resampled, y_resampled = smote.fit_resample(X, y)
5.6.2. 欠采样(Undersampling)
-
随机删除多数类样本。
pythonfrom imblearn.under_sampling import RandomUnderSampler undersample = RandomUnderSampler() X_resampled, y_resampled = undersample.fit_resample(X, y)
5.6.3. 调整类别权重
- 在模型训练中赋予少数类更高权重。
python
model = RandomForestClassifier(class_weight='balanced')
