「机器学习」写给 Python 开发者的 10 条机器学习建议


「机器学习」写给 Python 开发者的 10 条机器学习建议
本文插图
作者 | Pratik Bhavsar
译者 | 明明如月 , 责编 | 夕颜
出品 | CSDN(ID:CSDNnews)
有时候 , 作为一个数据科学家 , 我们常常忘记了初心 。 我们首先是一个开发者 , 然后才是研究人员 , 最后才可能是数学家 。 我们的首要职责是快速找到无 bug 的解决方案 。
我们能做模型并不意味着我们就是神 。 这并不是编写垃圾代码的理由 。
自从我开始学习机器学习以来 , 我犯了很多错误 。 因此我想把我认 机器学习工程中最常用的技能分享出来 。 在我看来 , 这也是目前这个行业最缺乏的技能 。
我称他们为不懂软件的数据科学家 , 因为他们中很大一部分人都没有系统地学习过计算机科学课程 。 而我自己也是如此 。
如果要选择雇佣一个伟大的数据科学家和一个伟大的机器学习工程师 , 我会选择雇佣后者 。
下面开始我的分享 。
学习编写抽象类 一旦开始编写抽象类 , 你就能体会到它给带来的好处 。 抽象类强制子类使用相同的方法和方法名称 。 许多人在同一个项目上工作 ,如果每个人去定义不同的方法 , 这样做没有必要也很容易造成混乱 。
1import os2from abc import ABCMeta, abstractmethod345class DataProcessor(metaclass=ABCMeta):6 """Base processor to be used for all preparation."""7 def __init__(self, input_directory, output_directory):8 self.input_directory = input_directory9 self.output_directory = output_directory1011 @abstractmethod12 def read(self):13 """Read raw data."""1415 @abstractmethod16 def process(self):17 """Processes raw data. This step should create the raw dataframe with all the required features. Shouldn't implement statistical or text cleaning."""1819 @abstractmethod20 def save(self):21 """Saves processed data."""222324class Trainer(metaclass=ABCMeta):25 """Base trainer to be used for all models."""2627 def __init__(self, directory):28 self.directory = directory29 self.model_directory = os.path.join(directory, 'models')3031 @abstractmethod32 def preprocess(self):33 """This takes the preprocessed data and returns clean data. This is more about statistical or text cleaning."""3435 @abstractmethod36 def set_model(self):37 """Define model here."""3839 @abstractmethod40 def fit_model(self):41 """This takes the vectorised data and returns a trained model."""4243 @abstractmethod44 def generate_metrics(self):45 """Generates metric with trained model and test data."""4647 @abstractmethod48 def save_model(self, model_name):49 """This method saves the model in our required format."""505152class Predict(metaclass=ABCMeta):53 """Base predictor to be used for all models."""5455 def __init__(self, directory):56 self.directory = directory57 self.model_directory = os.path.join(directory, 'models')5859 @abstractmethod60 def load_model(self):61 """Load model here."""6263 @abstractmethod64 def preprocess(self):65 """This takes the raw data and returns clean data for prediction."""6667 @abstractmethod68 def predict(self):69 """This is used for prediction."""707172class BaseDB(metaclass=ABCMeta):73 """ Base database class to be used for all DB connectors."""74 @abstractmethod75 def get_connection(self):76 """This creates a new DB connection."""77 @abstractmethod78 def close_connection(self):79 """This closes the DB connection."""


推荐阅读