10个适用的机器学习建议
作者头像
  • 飞机之家
  • 2020-04-06 19:08:49 4

1. 掌握抽象类的应用

在编写代码的过程中,抽象类是一个非常有用的工具。它们可以帮助我们确保代码结构一致,避免混乱。例如,我们可以定义一个基类,规定所有子类必须实现的方法。这样,即使项目中有多个开发者参与,也能保证代码的一致性。

下面是一个示例代码:

```python import os from abc import ABCMeta, abstractmethod

class 数据处理器(metaclass=ABCMeta): """所有数据预处理的基础类""" def init(self, 输入目录, 输出目录): self.输入目录 = 输入目录 self.输出目录 = 输出目录

@abstractmethod
def 读取(self):
    """读取原始数据"""

@abstractmethod
def 处理(self):
    """处理原始数据。此步骤应生成包含所需特征的原始数据框。不应实现统计或文本清理。"""

@abstractmethod
def 保存(self):
    """保存处理后的数据"""

class 训练器(metaclass=ABCMeta): """所有模型训练的基础类"""

def __init__(self, 目录):
    self.目录 = 目录
    self.模型目录 = os.path.join(目录, '模型')

@abstractmethod
def 预处理(self):
    """预处理数据,返回干净的数据。这主要涉及统计或文本清理。"""

@abstractmethod
def 设置模型(self):
    """定义模型。"""

@abstractmethod
def 训练模型(self):
    """训练模型。"""

@abstractmethod
def 生成指标(self):
    """使用训练好的模型和测试数据生成指标。"""

@abstractmethod
def 保存模型(self, 模型名称):
    """按指定格式保存模型。"""

class 预测器(metaclass=ABCMeta): """所有模型预测的基础类"""

def __init__(self, 目录):
    self.目录 = 目录
    self.模型目录 = os.path.join(目录, '模型')

@abstractmethod
def 加载模型(self):
    """加载模型。"""

@abstractmethod
def 预处理(self):
    """预处理原始数据,使其适合预测。"""

@abstractmethod
def 预测(self):
    """用于预测。"""

class 基础数据库(metaclass=ABCMeta): """所有数据库连接的基础类""" @abstractmethod def 获取连接(self): """创建一个新的数据库连接。"""

@abstractmethod
def 关闭连接(self):
    """关闭数据库连接。"""

```

2. 固定随机种子

在进行实验时,确保结果的可重复性至关重要。随机种子可以帮助我们实现这一点。如果不固定随机种子,可能会导致不同的训练集和测试集,以及神经网络的不同初始化权重,从而影响实验结果的一致性。

下面是一个示例代码:

```python def 设置随机种子(args): import random import numpy as np import torch

random.seed(args.seed)
np.random.seed(args.seed)
torch.manual_seed(args.seed)
if args.n_gpu > 0:
    torch.cuda.manual_seed_all(args.seed)

```

3. 使用少量数据进行初步测试

如果你的数据集非常庞大,而你只需要进行初步测试,那么可以先使用少量数据进行测试,以避免一次性加载大量数据。这种方法特别适用于本地环境配置不足的情况。

下面是一个示例代码:

python df_train = pd.read_csv('train.csv', nrows=1000)

4. 预防潜在错误

在处理数据时,确保数据中不存在空值是非常重要的。即使当前数据中没有空值,也不能保证未来不会出现这种情况。因此,需要始终保持这种检查。

下面是一个示例代码:

python print(len(df)) print(df.isna().sum()) df.dropna(inplace=True) print(len(df))

5. 显示处理进度

在处理大量数据时,了解处理进度和预计时间是非常有帮助的。可以使用 tqdm 或 fastprogress 库来显示进度条。

使用 tqdm 库:

```python from tqdm import tqdm import time

tqdm.pandas()

df['列名'] = df['列名'].progress_apply(lambda x: x**2)

text = "" for char in tqdm(["a", "b", "c", "d"]): time.sleep(0.25) text += char ```

使用 fastprogress 库:

python from fastprogress.fastprogress import master_bar, progress_bar from time import sleep mb = master_bar(range(10)) for i in mb: for j in progress_bar(range(100), parent=mb): sleep(0.01) mb.child.comment = f'第二栏状态' mb.first_bar.comment = f'第一栏状态' mb.write(f'完成循环{i}')

6. 使用 modin 提升性能

Pandas 是一个强大的数据处理库,但在某些情况下,如使用 groupby 函数时,性能可能较低。可以通过使用 modin 来提升性能。

下面是一个示例代码:

python import modin.pandas as pd

7. 记录函数运行时间

记录函数的运行时间有助于发现潜在的性能问题。可以使用装饰器来记录每个函数的运行时间。

下面是一个示例代码:

```python import time from functools import wraps

def 计时(f): """用于计时的装饰器""" @wraps(f) def 包装器(args, *kwargs): 开始 = time.time() 结果 = f(args, *kwargs) 结束 = time.time() print(f'函数{f.name}的运行时间为:{结束 - 开始:.4f}秒') return 结果 return 包装器

@计时 def 计数(): time.sleep(1) ```

8. 节省云资源成本

在使用云资源时,确保及时关闭实例以节省成本。可以使用脚本自动关闭云服务器。

下面是一个示例代码:

```python import os

def 运行命令(cmd): return os.system(cmd)

def 关机(秒=0, 操作系统='linux'): """在给定秒数后关机。适用于EC2实例,以节省成本。""" if 操作系统 == 'linux': 运行命令(f'sudo shutdown -h -t {秒}') elif 操作系统 == 'windows': 运行命令(f'shutdown -s -t {秒}') ```

9. 生成并保存报告

在训练模型后,生成并保存一份详细的报告,以便进行分析和汇报。

下面是一个示例代码:

```python import json import os

from sklearn.metrics import accuracyscore, classificationreport, confusionmatrix, f1score, fbeta_score

def 获取指标(y, ypred, beta=2, 平均方法='macro', y编码器=None): if y编码器: y = y编码器.inversetransform(y) ypred = y编码器.inversetransform(ypred) return { '准确率': round(accuracyscore(y, ypred), 4), '宏平均F1得分': round(f1score(y, ypred, average=平均方法), 4), '宏平均Fbeta得分': round(fbetascore(y, ypred, beta, average=平均方法), 4), '分类报告': classificationreport(y, ypred, outputdict=True), '分类报告CSV': classificationreport(y, ypred, output_dict=False).replace('n', 'rn') }

def 保存指标(指标: dict, 模型目录, 文件名): 路径 = os.path.join(模型目录, 文件名 + '报告.txt') 分类报告到CSV(指标['分类报告CSV'], 路径) 指标.pop('分类报告CSV') 路径 = os.path.join(模型目录, 文件名 + '指标.json') json.dump(指标, open(路径, 'w'), indent=4) ```

10. 编写良好的API接口

编写良好的API接口可以使模型更容易被其他应用调用。可以使用 FastAPI、uvicorn 和 gunicorn 来快速搭建高效的API服务。

下面是一个示例代码:

```python

安装依赖

pip install fastapi uvicorn gunicorn

快速搭建API服务

gunicorn -w 4 -k uvicorn.workers.UvicornH11Worker main:app

import uvicorn from fastapi import FastAPI

app = FastAPI()

@app.get("/") def 读取根路径(): return {"消息": "Hello World"}

if name == "main": uvicorn.run(app, host="0.0.0.0", port=8000) ```

以上是改写后的文章内容,确保了与原文的核心信息保持一致,同时通过同义词替换、句式重组等方式提高了文章的可读性和独特性。

    本文来源:图灵汇
责任编辑: : 飞机之家
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
适用机器建议学习
    下一篇