python 机器学习
sklearn 方法速查表
分类 | 方法 | 描述 |
---|
数据集加载 | sklearn.datasets.load_* | 加载小规模数据集 |
| sklearn.datasets.fetch_*(data_home=None) | 加载大规模数据集 |
数据集划分 | sklearn.model_selection.train_test_split(arrays, *option) | 划分训练集和测试集 |
特征提取 | sklearn.feature_extraction.DictVectorizer(sparse=True) | 字典特征提取 |
| sklearn.feature_extraction.text.CountVectorizer(stop_word=[]) | 文本特征提取 |
特征预处理 | sklearn.preprocessing.MinMaxScaler(feature_range=(0,1)) | 归一化 |
| sklearn.preprocessing.StandardScaler() | 标准化 |
数据编码 | sklearn.preprocessing.OneHotEncoder(sparse_output=False) | 独热编码 |
| sklearn.preprocessing.LabelEncoder() | 标签编码 |
特征降维 | sklearn.decomposition.PCA(n_components=None) | 主成分分析 |
估计器 | sklearn.pipeline.Pipeline | 管道,用于顺序执行多个步骤 |
| sklearn.neighbors.KNeighborsClassifier(n_neighbors=5) | K-近邻算法 |
| sklearn.naive_bayes.MultinomialNB(alpha=1.0) | 朴素贝叶斯算法 |
| sklearn.naive_bayes.GaussianNB() | 高斯朴素贝叶斯算法 |
| sklearn.tree.DecisionTreeClassifier(criterion='gini', max_depth=None) | 决策树 |
| sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion='gini', max_depth=None) | 随机森林 |
| sklearn.linear_model.LinearRegression(fit_intercept=True) | 线性回归 |
| sklearn.linear_model.SGDRegressor(loss="squared_loss", fit_intercept=True, learning_rate='invscaling', eta0=0.01) | 随机梯度下降回归 |
| sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True, solver="auto", normalize=False) | 岭回归 |
模型评估 | sklearn.metrics.classification_report(y_true, y_pred, labels=[], target_names=None) | 分类评估报告 |
| sklearn.metrics.mean_squared_error(y_true, y_pred) | 均方误差 |
| sklearn.metrics.log_loss(y_true, y_pred) | 对数损失 |
模型选择与调优 | sklearn.model_selection.GridSearchCV(estimator, param_grid=None, cv=None) | 网格搜索交叉验证 |
转换器 | sklearn.preprocessing.StandardScaler() | 标准化 |
| sklearn.preprocessing.OneHotEncoder(sparse_output=False) | 独热编码 |
| sklearn.preprocessing.LabelEncoder() | 标签编码 |
K-近邻 (KNN)
- 适用场景:小数据集、特征关系简单、需要解释距离权重的场景
- 关键参数:n_neighbors(k值)、weights(距离加权)、p(距离度量)
- 调参技巧:k值取奇数避免平票,用交叉验证选择最佳k;大数据集性能差
- 概率特性:通过近邻类别比例估计概率,probability=True可输出概率
- 注意事项:必须做特征标准化!维度灾难明显,高维数据慎用
param_grid = {
'model__n_neighbors' : [3,5,7],
'model__weights': ['uniform', 'distance'],
'model__leaf_size': [20, 30, 40],
'model__p' : [1,2]
}
朴素贝叶斯
- 类型对比:
- 高斯型:连续特征(如温度测量值)
- 多项式型:离散计数(如文本词频)
- 伯努利型:二元特征(如是否存在某个词)
- 关键参数:alpha(平滑系数)
- 调参技巧:alpha通常取0.1-1,小数据集需要更大alpha防过拟合
- 概率特性:直接输出概率估计,适合需要置信度的场景
- 优势:计算极快,适合实时系统;对缺失数据不敏感
决策树
- 关键参数:max_depth(深度)、min_samples_split(节点分裂最小样本)
- 调参技巧:优先限制最大深度,用网格搜索找最佳组合;特征多时用"sqrt"
- 概率特性:叶节点样本比例作为概率估计
- 优势:可解释性强,可视化方便;不需要特征缩放
- 陷阱:容易过拟合,必须用剪枝参数;对样本扰动敏感
随机森林
- 关键参数:n_estimators(树数量)、max_features(特征采样数)
- 调参技巧:树数量越多越好(直到性能饱和),用并行计算加速
- 概率特性:通过多棵树的投票比例估计概率
- 优势:自带特征重要性评估;抗过拟合能力强
- 注意事项:可能内存消耗大,调整n_jobs参数利用多核
param_grid = {
'rf__n_estimators': [100, 200, 300],
'rf__max_depth': [3, 5, None],
'rf__min_samples_split': [2, 5],
'rf__max_features': ['sqrt', 'log2'],
'rf__class_weight': [None, 'balanced']
}
支持向量机 (SVM)
- 类型选择:
- SVC(分类):适合小样本、高维度数据(如文本分类)
- SVR(回归):用于非线性回归问题
- 关键参数:C(正则化强度)、kernel(核函数)、gamma(核宽度)
- 调参技巧:优先用RBF核;大数据集用linear核;gamma小值更抗噪
- 概率特性:需设置probability=True(计算变慢),使用Platt缩放估计概率
- 注意事项:必须做特征标准化!内存消耗大时调大cache_size参数
线性模型
- 类型对比:
- 线性回归:基础线性关系
- 岭回归:解决多重共线性(L2正则)
- SGD:大数据集在线学习
- 关键参数:alpha(正则强度)、penalty(正则类型)
- 调参技巧:用StandardScaler标准化;SGD需要调整学习率策略
- 概率特性:逻辑回归直接输出概率(sigmoid转换)
- 优势:系数可解释性强;SGD适合海量数据
速查表(SVM补充)
分类 | 方法 | 关键参数 |
---|
SVM分类 | sklearn.svm.SVC | C, kernel, gamma, probability |
SVM回归 | sklearn.svm.SVR | C, kernel, gamma |
模型评估 | metrics.accuracy_score | 分类准确率 |
| metrics.f1_score | 类别不平衡时使用 |
调参黄金法则
- 先找学习率/树数量/SVM的C这类全局参数
- 再调单个模型复杂度参数(如树的深度、核函数)
- 最后处理类权重/样本权重等业务相关参数
- 用
GridSearchCV
时,先用大范围粗调,再小步微调
概率使用技巧
- 输出概率:KNN、贝叶斯、决策树、随机森林、逻辑回归
- 校准概率:SVM需要设置probability=True
- 应用场景:排序任务(按概率排序)、集成学习(作为基模型)