十の並列した脳

何でも勉強する,毎週月木曜に投稿予定

「初探機器學習使用Python」まとめ#3 第一章 大致接近正確的軟體

「初探機器學習使用Python」(↓の中国語版 )

Thoughtful Machine Learning with Python: A Test-Driven Approach

Thoughtful Machine Learning with Python: A Test-Driven Approach

 

 

前回↓

 

ryosuke-okubo.hatenablog.com

 

 

#3では第1章について扱う。

 

 

將軟體撰寫正確

SOLID

SOLIDはソフトウェア開発における5原則で,Robert Maetinにより提唱された。

  • 單一職責原則(SRP-Single Responsibility Principle)
  • 開放/封閉原則(OCP-Open / Closed Principle)
  • 里氏替換原則(LSP-Liskov Substitution Principle)
  • 介面隔離原則ISP-Interface Segregation Principle)
  • 相依性反轉原則DIP-Dependency Inversion Principle)

 

詳細はここでは省略,以下などを参考。

https://postd.cc/solid-principles-every-developer-should-know/

https://qiita.com/yui_mop/items/93fef037a787318e7067

 

測試與TDD

測試驅動開發的想法簡單:

撰寫一個測試項,記錄實現的內容;

首先進行測試確驅動開發的想法很簡里定此測試項運作失敗,接著撰寫程式碼修正此測試項,並在通過測試之後,調整相關程碼以符合SOLID原則。(p5)

単語

  • 測試驅動開發テスト駆動開発,TDD
  • :とても
  • 撰寫:書く
  • :〜したい,〜すべき,...
  • 首先:まず
  • :〜によって,〜として,...
  • 接著:それから
  • 程式碼ソースコード

意訳

テスト駆動開発の考え方は単純です:

テスト項目を書いて達成したいことを記録します;

 手順

  1. とても簡単な駆動開発のアイデアを確認するテストを実行する,ここでテスト項目は失敗する
  2. テスト項目を修正するコードを書く
  3. テストに成功した後,SOLID原則に従うために関連コードを調整する。

 

重構

重構 現有的程式碼以避免技術債的累積(p6)

単語

  • 重構:refactoring,リファクタリング
  • 現有:あり合わせの,既存の
  • 技術債:Technical debt,技術的負債

意訳

「技術的負債の累積を回避するために既存のコードをリファクタリングする」 

 

簡単に言えば,重構とはプログラムを整理することである。技術的負債とは,欠陥のあるコードを放置すると取り返しのつかないことになる(利息が積み重なるような)ことの例えである。

 

撰寫正確的軟體

用機器學習撰寫正確的軟體

省略。

 

究竟何謂機器學習?

省略。

 

機器學習的高利貸技術債

Machine Learning: The High-Interest Credit Card of Technical Debtにおける著者の主張を表す一文。

文中指出機器學習專案本質上是複雜且邊界模糊,重度仰賴資料相依性內容,遭受系統級的麵條式程式碼(spaghetti code)影響,以及可能 因為外界的變化徹底改變。

単語

  • 專案:project,重大事項
  • 仰賴:〜に頼る,〜に依存する
  • 系統:system
  • 可能:〜かもしれない
  • 因為 X 而 Y:XによってY

意訳

「本稿では、機械学習プロジェクトは本質的に複雑で境界がぼやけており、データ依存型コンテンツに大きく依存し、システムレベルのスパゲッティコードの影響を受け、外部からの変更によって急激に変わる可能性があると指摘する。」

 

参考:

機械学習システムにおける「技術的負債」とその回避策 - Qiita

https://www.techscore.com/blog/2014/12/10/technical_debt/

 

將SOLID應用於機器學習

SOLIDからみた,機械学習アンチパターンの説明。

 

單一職責原則(SRP)
  • 糾結(entanglement)

    CACE原則(Changing Anything Changes Everything)......何かを変えると全てが変わる,つまり1つの変更により色々変更されてしまう。

  • 黏合式碼(glue code)

    プログラムの要求仕様の実現には一切寄与しないが、もともと互換性がない部分同士を結合するためだけに働くコードのこと。(Wikipediaより)

 

開放/封閉原則(OCP)

 

里氏替換原則(LSP)
  • 未充分利用的資料相依性(Underutilized data dependencies)

     不要なパッケージの累積に繋がる。

 

介面隔離原則(ISP
  • 未宣告的使用者 / 可見性負債(Undeclared consumers / visibility debt)

     知らないところで機械学習の予測が使われる。

  • 不穩定資料相依性(Unstable data dependencies)

    時間経過により変化するものは,入力変数として不安定。 

 

相依性反轉原則(DIP
  • 管道叢林(Pipeline jungles)

  • 實驗路徑(Experimental paths)

 

複雜但並非不可能的機器學習程式

省略。

 

TDD:科學方法2.0

成功的秘訣是:針對機器學習專案,使用SOLID檢查清單,TDD工具以及重構作業實現。(p13)

単語

  • 針對:〜に対処して,〜において

意訳

「成功の秘訣は、機械学習プロジェクトにおいて,SOLIDチェックリスト、TDDツール、およびリファクタリングの割り当てを使用することである。」

 

重構知識之路

省略。

 

本書的預期

#1の続きより。

機器學習是一個令人著迷的尃業領域,可以實現很多的需求,但如果缼少紀律,檢查清單與指引,則許多的機器學習專案注定 要面臨失敗。(p13)

単語

  • 著迷:夢中,魅了する
  • 可以:〜できる
  • 如果:もし〜なら
  • 注定:〜することとなる,運命付けられている
  • :〜したい,〜しなければならない,〜のはずである,...

意訳

機械学習は多くのニーズを満たすことができる魅力的な実践分野であるが、ルールやチェックリストやガイドラインが欠けていると、多くの分野で失敗するおそれがある。」

 

次回↓

 

ryosuke-okubo.hatenablog.com