首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
4.1 分类变量
4.1.1 One-Hot 编码(虚拟变量)
4.1.2 数字可以编码分类变量
4.2 分箱、离散化、线性模型与树
4.3 交互特征与多项式特征
4.4 单变量非线性变换
4.5 自动化特征选择
4.5.1 单变量统计
4.5.2 基于模型的特征选择
4.5.3 迭代特征选择
4.6 利用专家知识
5.1 交叉验证
5.1.1 scikit-learn 中的交叉验证
5.1.2 交叉验证的优点
5.1.3 分层k 折交叉验证和其他策略
5.2 网格搜索
5.2.1 简单网格搜索
5.2.2 参数过拟合的风险与验证集
5.2.3 带交叉验证的网格搜索
5.3 评估指标与评分
5.3.1 牢记目标
5.3.2 二分类指标
5.3.3 多分类指标
5.3.4 回归指标
5.3.5 在模型选择中使用评估指标
6.1 用预处理进行参数选择
6.2 构建管道
6.3 在网格搜索中使用管道
6.4 通用的管道接口
6.4.1 用make_pipeline 方便地创建管道
6.4.2 访问步骤属性
6.4.3 访问网格搜索管道中的属性
6.5 网格搜索预处理步骤与模型参数
6.6 网格搜索选择使用哪个模型
7.1 用字符串表示的数据类型
7.2 示例应用:电影评论的情感分析
7.3 将文本数据表示为词袋
7.3.1 将词袋应用于玩具数据集
7.3.2 将词袋应用于电影评论
7.4 停用词
7.5 用tf-idf 缩放数据
7.6 研究模型系数
7.7 多个单词的词袋(n元分词)
7.8 分词、词干提取与词形还原
7.9 主题建模与文档聚类
8.1 处理机器学习问题
8.2 从原型到生产
8.3 测试生产系统
8.4 构建你自己的估计器
8.5 下一步怎么走
8.5.1 理论
8.5.2 其他机器学习框架和包
8.5.3 排序、推荐系统与其他学习类型
8.5.4 概率建模、推断与概率编程
8.5.5 神经网络
8.5.6 推广到更大的数据集
当前位置:
首页>>
技术小册>>
Python机器学习基础教程(下)
小册名称:Python机器学习基础教程(下)
### 8.4 构建你自己的估计器 在Python的机器学习生态中,特别是利用scikit-learn这样的库时,我们通常能够直接使用大量预定义的估计器(estimators)来处理各种数据科学和机器学习任务。然而,理解并构建自己的估计器不仅有助于深入理解机器学习算法的工作原理,还能解决特定问题中标准库未能覆盖的需求。本章将引导你通过从基础到进阶的步骤,学习如何构建自己的估计器,使其能够无缝集成到scikit-learn的框架中。 #### 8.4.1 理解scikit-learn的估计器基础 在scikit-learn中,几乎所有的模型都遵循一个共同的接口:它们都是`BaseEstimator`类的子类,并可选地实现了`RegressorMixin`、`ClassifierMixin`或`TransformerMixin`等接口,以定义模型的具体行为(如回归、分类或数据转换)。这个接口定义了一系列必须实现的方法,如`fit`、`predict`、`score`等,这些方法构成了模型训练、预测和评估的基础。 - **fit方法**:用于训练模型,接收训练数据和目标值作为输入,并更新模型的内部状态。 - **predict方法**:使用训练好的模型对新的数据进行预测。 - **score方法**(可选):评估模型在给定测试集上的性能,返回一个数值分数。 #### 8.4.2 设计你的自定义估计器 在设计你自己的估计器之前,明确你的目标至关重要。你是否在寻找一种特定的数据转换方式?还是需要实现一个新颖的回归或分类算法?以下是构建自定义估计器的一般步骤: 1. **定义类结构**: 创建一个继承自`BaseEstimator`的类,并根据需要混合(mixin)`RegressorMixin`、`ClassifierMixin`或`TransformerMixin`。 2. **实现fit方法**: 编写`fit`方法来训练你的模型。这通常涉及数据预处理、模型参数优化等步骤。 3. **实现predict/transform方法**: 根据你的模型类型(分类、回归或转换),实现`predict`或`transform`方法。这些方法使用`fit`方法中训练好的模型参数对新数据进行预测或转换。 4. **(可选)实现score方法**: 如果你需要评估模型性能,可以实现一个`score`方法,该方法接受测试集作为输入,并返回一个数值分数以衡量模型性能。 5. **添加其他辅助方法**: 根据需要,可以添加如`get_params`和`set_params`等scikit-learn标准方法,以便于参数管理和模型调参。 #### 8.4.3 示例:构建一个简单的线性回归估计器 为了更具体地说明上述步骤,我们将构建一个简单的线性回归估计器。尽管scikit-learn已经提供了强大的线性回归实现,但通过这个例子,你可以学习到如何从头开始构建自己的模型。 ```python from sklearn.base import BaseEstimator, RegressorMixin from sklearn.utils.validation import check_X_y, check_array, check_is_fitted import numpy as np class SimpleLinearRegression(BaseEstimator, RegressorMixin): def __init__(self, fit_intercept=True): self.fit_intercept = fit_intercept self.coef_ = None self.intercept_ = None def fit(self, X, y): """ 训练线性回归模型。 参数: - X: 训练数据的特征矩阵,形状为(n_samples, n_features)。 - y: 训练数据的目标值向量,形状为(n_samples,)。 返回: - self: 返回训练好的模型实例。 """ X, y = check_X_y(X, y) if self.fit_intercept: X_b = np.c_[np.ones((X.shape[0], 1)), X] # 添加x0=1以拟合截距 else: X_b = X # 使用正规方程求解θ theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y) # 分离截距和斜率 if self.fit_intercept: self.intercept_ = theta_best[0] self.coef_ = theta_best[1:] else: self.intercept_ = 0 self.coef_ = theta_best return self def predict(self, X): """ 使用训练好的模型进行预测。 参数: - X: 要预测的数据的特征矩阵,形状为(n_samples, n_features)。 返回: - y_pred: 预测的目标值向量,形状为(n_samples,)。 """ check_is_fitted(self, ['coef_', 'intercept_']) X = check_array(X) if self.fit_intercept: X_b = np.c_[np.ones((X.shape[0], 1)), X] # 添加x0=1 else: X_b = X return X_b.dot(np.r_[self.intercept_, self.coef_]) # 使用示例 from sklearn.model_selection import train_test_split from sklearn.datasets import load_boston X, y = load_boston(return_X_y=True) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) model = SimpleLinearRegression() model.fit(X_train, y_train) y_pred = model.predict(X_test) print("预测值的前五个:", y_pred[:5]) ``` #### 8.4.4 扩展与优化 构建自定义估计器后,你可能需要对其进行扩展和优化。以下是一些建议: - **添加正则化**:通过修改目标函数来防止过拟合,如L1或L2正则化。 - **实现交叉验证**:在训练过程中使用交叉验证来选择最佳模型参数。 - **性能优化**:利用高效的数值库(如NumPy、SciPy)和并行计算技术来提高模型训练速度。 - **集成学习**:将你的估计器与其他模型结合,形成更强大的集成模型。 #### 8.4.5 结论 通过构建自己的估计器,你不仅能够深入理解机器学习算法的内部机制,还能根据具体需求定制解决方案。这个过程需要耐心和实践,但一旦掌握,你将拥有解决复杂数据科学问题的强大工具。希望本章的内容能够为你提供一个良好的起点,激励你在机器学习的道路上不断探索和创新。
上一篇:
8.3 测试生产系统
下一篇:
8.5 下一步怎么走
该分类下的相关小册推荐:
Python合辑10-函数
Python合辑6-字典专题
Python自动化办公实战
Python爬虫入门与实战开发(下)
Python编程轻松进阶(三)
Python编程轻松进阶(四)
Python爬虫入门与实战开发(上)
Python与办公-玩转Excel
Python合辑14-面向对象编程案例(下)
Python合辑5-格式化字符串
Python合辑3-字符串用法深度总结
Python与办公-玩转PPT