統計学・機械学習・深層学習

2021/07/18

プログラマが「何をやっているか分からない」「何が分からないか分からない」状態から脱出する記事がとても良い

プログラマが「何をやっているか分からない」「何が分からないか分からない」状態から脱出する記事がとても良いのでメモ。

【参考】
(1) 出来るプログラマーやエンジニアの方でも「何をやっているか分からない」「何が分からないか分からない」状態に陥りますか?その時は、どの様にして対処・解決しますか?に対するYuki Sonodaさんの回答 - Quora

RubyコミッタのYuki Yugui Sonodaさん (@yugui)もこんな問題意識を持たれていたらしい。

(引用開始)
私は出来るエンジニアじゃないせいか、何かちょっと経験の浅い分野のことをやると「何をやっているか分からない」「何が分からないか分からない」状態に陥ります。
それで、Stack Overflowで調べたコード片をコピペして動かすことがあります。
最近はGradleのビルドスクリプトの書き方が本当に何も分からなくてStack Overflowに世話になりました。
(引用終了)

Yuki Yugui Sonodaさん (@yugui)の回答なので、本当によく考えられている。
こんな手順を踏む。

チュートリアルやGetting Startedのような案内文書があれば、写経して動かしてみる
→先ほど体験したつまずきや未知の用語を手がかりとしながら概念を理解する
→良い実例を読むとともに利用できる資源を網羅する
→実際にやってみて経験を積む

僕も、Pythonのデータ分析、機械学習&深層学習、ソフトウェア統計分析、Ciscoネットワークなどを初めて勉強した時、同じような手順を踏んでいたのを思い出した。

上記の手順をもう少し深堀りして考えてみると、野中郁次郎先生のSECIモデルを連想させる。
あるいは、コルブの経験学習理論を連想させる。
この辺りも考えてみたい。

SECIモデルは知識の再利用モデル、または、実践知を生み出すモデルだ: プログラマの思索

「経験学習」とは?学習プロセスや促進させるためのポイントなどご紹介 | BizHint(ビズヒント)- クラウド活用と生産性向上の専門サイト

【公開】XP祭り関西2014講演資料「KPTによるプロセス改善~あなたはPDCAを回したことがありますか?」 #xpjugkansai: プログラマの思索

| | コメント (0)

2021/06/06

MATLABとPythonのリンク

MATLABについて調べてみたメモ。
MATLABすら触ったことがないのでラフなメモ。

数学を避けてきた社会人プログラマが機械学習の勉強を始める際の最短経路 - Qiita

【参考】
Octaveの概要とMatlabとの違い - 毛だるまの備忘録

これからはじめる人のためのMATLAB活用術 - 「設計・解析」(4) Simulinkは何をするツールなのか | TECH+

MATLABは数値計算用に特化したプログラミング言語で、Mathematicaみたいなイメージと思ってる。
MATLABのプログラムをSimulinkに連携して、CAEみたいに、制御工学や電気電子回路分野のモデルをシミュレーションさせるのが目的とイメージしている。

第1週目:Matlab の基本的な使用法_筑波大学

第2週目:Simulink の基本的な使用法_筑波大学

MATLABのオープンソース版にOctaveがある。
MATLABの代わりに、RやPythonを使う場合もある。
やはり今の時代ならば、Pythonで書くべきか??

MATLABとPython、どっちが良いのでしょうか? | アルゴリズム開発センター

MATLAB に慣れた人が Python を始めるときの11の注意点

Pythonを使い始めて一か月の元matlab使いの感想 - グレーな道を進む

二年前 Ruby + MATLAB + R + Python 今 95% Pythonな例: YATTSUKE BLOG

Python vs MATLAB - jtwp470’s blog


| | コメント (0)

2021/06/01

相関係数だけで判断することの危うさの例

相関係数だけで判断することの危うさの例をメモ。

アンスコムの例 - Wikipedia

相関関係があれば、因果関係があるように錯覚してしまう危険は多い。

システム思考でも、因果ループ図を書く時、最初は2つの変数の時系列グラフから相関関係を見出し、そして、因果関係を抽出する。
売上が増えれば、利益も増える、みたいな感じ。

しかし、実際は相関関係があるからと言って、因果関係が成り立つとは限らない。

打合せの議論を因果ループ図で書き起こしてみると、そういう思い込みが割とある、と気づく。
つまり、バイアスを皆持っている。
バイアスは偏見かもしれないが、何らかの価値観が前提にあるから、ロジックが作られている。

そういう暗黙の因果関係を抽出する時、割と相関関係と因果関係をラフに同一視しているな、と気づく。


| | コメント (0)

2021/04/01

統計学と機械学習の違いは、データの説明かデータの予測か

統計学と機械学習の違いについて、明確な回答があったのでメモ。
統計学は「データの説明」、機械学習は「データの予測」に目的がある。

【参考1】
統計学と機械学習はどう違いますか?一方にできてもう一方にできないことは何ですか? - Quora

「統計学と機械学習の違い」はどう論じたら良いのか - 渋谷駅前で働くデータサイエンティストのブログ

(引用開始)
記事中では「統計学は『説明』するためのもの、機械学習は『予測』するためのもの」という表現をしています。
(引用終了)

【参考2】
データ分析の事始め~統計学と機械学習の違い~ | 株式会社豆蔵

(引用開始)
統計学は「データの説明」に、機械学習は「データの予測」に重きを置いていると言えます。
この違いはデータ分析を行う側にとって大きな違いであり、使い方を間違ってしまうと、データから有用な知識を得られない可能性があります。
(引用終了)

【参考3】
「統計」と「機械学習」の違いの整理で多くの事業会社で「機械学習」が使えない理由が視えてきた! - Qiita

(引用開始)
「機械学習」は予測や判断は行うもののなぜそうなったのかは一般的にはブラックボックスだ。
「統計」で行う予測や判断は、なぜそういう結論になったのかの理由付けが重要になり(理由付けを行うための学問であり)、理由はホワイトボックスとなっている。

なぜ多くの事業会社が「機械学習のアプローチを使えない」のか?
要因の整理に力を入れることが目的の「統計」は社会科学の課題解決に向いており、「機械学習」は自然科学の予測やロボットでの自動処理に向いている。と、
(引用終了)

【参考4】
【図解】コレ1枚でわかる統計学と機械学習の関係:ITソリューション塾:オルタナティブ・ブログ

(引用開始)
「データを使って問題を解決する」という方法論において、「統計学」も「機械学習」も違いはありません。両者の違いは、方法論、すなわちアルゴリズムやテクノロジーにあるというよりも、その目的にあると言えるでしょう。

統計学は、データを「説明」することを目的としており、記述統計(descriptive statistics)と推測統計(inferential statistics)に分けることができます。
(中略)
一方、機械学習は、データから「予測」して、分類・識別・判断を最適におこなえるようにすることを目的としています。

予測とは、まだ分かっていない答えを知るためのモデル(推論モデル)をデータから作り、これをいまのデータに照らし合わせて、将来何が起こるのかを予測する、この対象をどのグループに分類するのが適切なのかを決める、いま目の前にあるのは何かを識別するなどを行います。つまり、データを与えれば、推論モデルに照らし合わせて、分類・識別・判断を自動化することを目指しています。
(引用終了)

【1】Pythonで機械学習や深層学習のプログラムを写経したり、真似て書いていると、まだ分かってないな、という気持ちになる。
その気持になった原因を探ってみると、データをモデル化して構造を見たいのか、データをモデル化して予測に使いたいのか、を混同しているような気がした。

たとえば、統計学とは~という中身の本は、データをモデル化して構造を見るためのアルゴリズムだけを紹介している。
だから、昨今の機械学習や深層学習ではどうなの?という疑問があった。

統計学は「データの説明」、機械学習は「データの予測」、という基準で使い分ければ、ちょっとは迷子になりにくいだろう。

【2】しかし、統計学でも、機械学習でも、利用シーンに応じてアルゴリズムを使い分ける必要があるが、アルゴリズムの数が膨大なので、どの場面にどのアルゴリズムが有効に利用できるのか、なかなか分からない。

現実世界では、データをモデル化した時、モデルの数は星の数ほどあるだろうから、それぞれのモデルに合った統計アルゴリズムも星の数ほどある。
それらを逐一覚えるような気は正直起きない。

scikit-learn「アルゴリズム・チートシート」のリンク: プログラマの思索

でも、何らかの基準は欲しい。
結局、それぞれの事象に対して、そのモデルに見合ったアルゴリズムを見つけては、新規性がある!と叫んで、どんどん発見していき、植物学や動物学みたいに、数多くのアルゴリズムという標本集めをやっているだけなのかだろうか?
この辺りはもうちょっと考えてみる。

| | コメント (0)

2021/03/11

ネットワークの根本問題は何か~昨今のIT技術と時代の変化についての考察

以前から、インフラ基盤の知識を身に着けたいと思っていて、今更ながらCCNAの教科書や資料を読み始めている。
Cisco機器のコマンドにもだいぶ慣れてきた。

【1】ネットワーク技術の根本問題は一体何だろうか??

ネットワーク技術の問題に対して、印象は3つある。

【2】1つは、GNS3のエミュレータとかPacketTracerのシミュレータでもいいので、実際の知識やコマンドを試す環境が必要なこと。
ネットワーク技術を身につけることが割と難しい理由は、ルータやスイッチなどの実機を購入しないと実際に試せないからだ。
しかも、ルータ1個では意味がなくて、ルータやスイッチを5個、10個集めて、実際にSTPやOSPFを試せるようなネットワーク構造を作らないと、試せない。
つまり、個人でネットワーク技術を体験するには、コストも場所も必要になるので、壁が高い。

しかし、直近10年くらいで、GNS3のエミュレータとかPacketTracerのシミュレータによって、ルータやスイッチを仮想的に実現できるようになったおかげで、PC上で簡単にネットワークを作れるようになった。
すると、BGPとかEIGPレベルは難しいけれど、STPやOSPFレベルのネットワークなら、実際にCiscoのコマンドを叩いて試せる。

Ciscoルータ/Catalystコマンド一覧 - ネットワーク入門サイト

とはいえ、ネットワーク初心者にとって、この環境を整備するだけでも割と大変。
だが、JavaでもRubyでもPthonでも、開発環境を整備するのが大切で、実際にプログラムを動かして、初歩的なミスとか、本当に基礎の部分が理解できていない所を一つずつ試すのが大事なのと同じだな、と思う。

個人的には、GNS3のUIの方が好きだが、DHCPやNATの疎通確認ではVMを作るとか、無線LANの疎通確認では、無線アクセスポイントなどの実機を実際に接続する手間がかかる。
一方、PacketTracerはUIがあまりイケてないが、DHCPやNAT、疑似Webサーバー、IP電話、無線アクセスポイントの機能があるので疎通確認が簡単。
GNS3とPacketTracerを使い分けるのが良いのかもしれない。

【3】2つ目は、ネットワーク技術の根本的な問題は、性能を出すために最短経路をリアルタイムに一早く算出することと、障害が起きても代替ルートで常時接続できる冗長性・耐障害性の確保、というトレードオフ。
そのために、L2のSTPやL3のOSPFとか、いろんな技術で回避しようとしている。

過去の試行錯誤の歴史によって、Ciscoのルータやスイッチは、ものすごく複雑な仕様になったんだな、という印象を受けている。
たとえば、STPがVLANよりも先に仕様が作られたために、STPの仕様がすごく複雑になったイメージがある。

【4】3つ目は、セキュリティの機能がすごく豊富なこと。
ルータやスイッチを経由して数多くのデバイスが相互に通信できて、スケールアップも耐障害性も確保できる。
しかし、何でもかんでも、どんな通信でもOKというわけにはいかない。
内部ネットワークに不審者が入っては困るし、社内ネットワークでも部門ごとに情報アクセスを制限したい。
そのために、L3レベルでACLやAAA、VPN、L2レベルでポートセキュリティやVACL、Dynamic Arp Inspectionなどの数多くのセキュリティ機能が用意されている。
こういう機能を見ると、過去のセキュリティ事故やウイルスの経験から、歴史的経緯によって、どんどん機能追加されて複雑化したのだろうと推測する。

【5】最近のIT技術の流れを見ていると、クラウドの普及のために、アプリ開発者はL7層だけでなく、L2のデータリンク層やL3ネットワーク層までの知識が要求されるようになった。
実際、AWSの膨大なサービスや機能を見ると、L2・L3層のスイッチ・ルータを仮想化することで、ネットワークそのものを仮想化してしまって、クラウド上で簡単にスケールアップできるようになっている。

一方、Infrastructure as Codeの流れによって、インフラ担当者も、L2・L3層だけでなく、L7層などのより上位のアプリ層レベルが要求されるようになった。
実際、Ansible、Docker、VirtualBoxなどの仮想化技術では、シェルスクリプトの実装だけでなく、Pythonでのプログラミングまで要求される場合が多い。

つまり、アプリ開発者もインフラ担当者も、クラウドが当たり前の現時点では、プログラミングもネットワークも両方の知識と技術、経験が要求されている。
さらに、機械学習やディープラーニングの急速な発展とクラウド上でのマシーンラーニング基盤の実装が簡単になったから、これらの知識や経験も要求されてきている。
個人的には、直近3年ぐらいで、急激にIT技術の環境が変わってしまったように感じている。

【6】昨今のコロナ禍によって、仕事も人付き合いもビジネスもオンライン化されてしまった。
今後は、ビジネスも仕事もAIでどんどん代替されていくだろう。
そして、中間層の仕事は不要となり、IT技術に関する高度な専門知識を持つ知的労働者と、対面でベタベタに人と関係するしか作業できない仕事、たとえば医療系や食事提供、観光などの、労働集約的な効率の低いサービス業の労働者に二分化されていくだろう。
つまり、社会がどんどん二極化していくのではないだろうか。

そういう時代の流れとIT技術の流れについて、色々考えていく。

| | コメント (0)

2021/01/11

Pythonデータ分析試験、Python基礎エンジニア試験に合格した感想~Pythonの機械学習や深層学習が目指すのは因果推論ではないか

Pythonデータ分析試験、Python基礎エンジニア試験に無事に合格できた。
感想をラフなメモ。

【参考】
Pythonデータ分析試験 | 一般社団法人Pythonエンジニア育成推進協会

Python基礎試験 | 一般社団法人Pythonエンジニア育成推進協会

【1】Python基礎エンジニア試験は簡単だったが、Pythonデータ分析試験は難しかった。

Python基礎エンジニア試験は、RubyやJavaを知っていれば、それら言語のライブラリを比較しながら理解すれば良かった。
Pythonは確かに書きやすい。
Rubyのように異音同義語のようなAPIはないし、文法も簡素だし、Tabのインデントだけでプログラミングできるので、手に馴染む。

しかし、Pythonデータ分析試験では、Numpy・Pandas・MatplotLib・sklearnの割とたくさんのAPIを覚える必要があるし、統計学や線形代数の数学の知識、分類・回帰・次元削減・クラスタリングなどの機械学習の知識も必要になるので、Python以外の知識習得に手間取った。
統計検定2級、G検定も取得していたので、それらの知識に慣れているから1ヶ月で十分だろう、と思ったが、実際は2ヶ月以上習得にかかった。
まだまだ、Pythonのセンスが足りないので勉強すべきと分かった。

なお、Python基礎エンジニア試験の教科書「Pythonチュートリアル 第3版」、Pythonデータ分析試験の教科書「Pythonによるあたらしいデータ分析の教科書」は持っておいた方がいい。
このAPIはどうだったけ?と振り返る時に、辞書代わりになる。

【2】Python基礎エンジニア試験、Pythonデータ分析試験で良かったのは、Web上の模擬問題が充実していること。

PRIME STUDY(プライム・スタディ) ? Python試験とPHP試験の無料模擬試験サイト

G検定、Python、Rubyの模擬テスト | DIVE INTO EXAM

上記のWeb問題を5~10回転ぐらいやって100%得点できてから受験したので、そんなに緊張感はなかった。
特に、PRIME STUDYの問題の方が確かに難しかったけれど、出題内容は「Pythonによるあたらしいデータ分析の教科書」と全く同じなので、理解に役立った。

【3】Pythonデータ分析試験、Python基礎エンジニア試験を良かったことは、3つある。

【3-1】プログラミングはブロックを組み立てる感覚が大切、と改めて感じたこと。

Python 初心者だから、Numpy、Pandas、Matplotlib、sklearnのAPIでつまづいてるけど、機械学習は面白い。
教師ありデータなら、train_test_splitして、機械学習のモデルにfitで学習させて、scoreで評価し、最後にpredictで予測する。
実際は、そういうデータの前処理に大量のロジックを組み込むわけだが。

すると、1行でもロジックというブロックが崩れると、プログラムは意図通りに動かなくなる。
ちょうど、積み木の途中で1個のブロックが崩れると、全てが崩れてしまうみたいな感じ。
プログラミングはとても繊細な作業。

プログラミングが書けるかどうかは、そういうセンスに依存する所も大きいと思う。

「60%の人間はプログラミングの素質がない」記事のリンク: プログラマの思索

【3-2】プログラミングは書くだけでなく、開発環境も大事、と改めて感じたこと。

Pythonが良いのは、Anacondaで一通りのライブラリが揃い、ライブラリのバージョンごとに依存した開発環境を別々に保持できること。
一方、RubyならGemのバージョン依存にすごく手間取るし、Ruby初心者はRailsの環境構築ですぐにつまずいてしまう悲しさがあると思う。

また、PyCharmという開発環境がとても良い。
コード補完できて、デバッグもできるので、プログラミングにストレスがない。
一方、コンソール画面で対話形式でPythonをプログラミングできるよ、ブラウザ上でJupytorNotebookでグラフも書けるよ、と言われても、やっぱりコード補完できないのは辛い。

僕は、IntelliJの有償ライセンスを購入したので、JupytorNotebook上でもコード補完もデバッグもできて、ああ、こういう風に動いてるのか、とか、初心者レベルからの気づきがあった。
プログラミング初心者はこういうつまらないレベルでつまずいて、先に行けなくなるから。

DockerやAnsibleの考え方もそこに通じているのではないか、と思う。

【3-3】Pythonを通じて、最先端の技術に簡単にたどり着けること。

線形代数や微積分、統計学の数学の知識は、それがなくても、Pythonを書きながら慣れていけばいい。
Numpyのブロードキャストやユニバーサルファンクションに慣れれば、自然に線形代数は理解できるはず。
統計量の計算、データの前処理となる分散正規化、ヒストグラムで表示する前処理となる層化抽出法、などは、PandasやMatplotLib、sklearnに慣れれば、理解できるはず。
sklearnのSGDライブラリを使いこなせれば、微積分の考え方も分かるはず。
もちろん、「ゼロから始めるディープラーニング」のサンプルプログラムを動かしながら慣れていけば、ディープラーニングだけでなく、微分における極小値や最小値の違い、鞍点のイメージも理解できるはず。

つまり、Pythonの機械学習ライブラリを使いこなせるようになれば、自然に、統計学・線形代数・微積分の知識も身につくはずだ。
紙と鉛筆で計算することも大事だが、プログラミングでは、要は動かしてナンボの世界だから。

そして、今のIT技術の最先端に一度到達できれば、他の分野でも、初心者レベルから今の自分のレベルまでに到達するにはどれくらいの道のりが必要なのか、そこから先にはどんな課題が控えているのか、を想像できるようになる。
そうすれば、すごく楽しくなる。

おかげで、Pythonの機械学習や深層学習の本が読めるようになってきたので、乱読できるのがすごく楽しい。
まずは「Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎」から読み始めていて、今頃になって、そういう意味だったのか、とか色々気づきがあった。

【4】Pythonの機械学習や深層学習ライブラリを覚えた後で、やりたいことは、目の前の問題事象に対し、原因とその予測を見つける因果推論ではないか。

100件以上のデータがあれば、分類モデルや回帰モデルで簡単にモデルを試せて、やりたい問題が解けるのに感激した。
最終的にやりたいのは、目の前の問題やイベントに対して、誰も見つけなかった因果関係の発掘だよな、と思う。

Python でプログラムを書ければ、誰でも新しい因果関係を発見して、経験則と言う法則を作り出せる。
たとえば、行動経済学や公共経済学であれば、こういう政策を政府が提示した場合、国民の消費活動や企業の生産活動はどう予測されるか、などの問題も、スマホやWebで収集した大量データをクラウド上に集めて、機械学習や深層学習のエンジンでモデルを学習させれば、その結果を予測することもできる。
つまり、回帰分析のように、予測したい目的変数に対し、有意な説明変数を見つけることで、単に相関関係を見つけるだけででなく、AならばBとなる、といった因果推論まで提示できるはず。

経済学は信頼性革命や構造推定により大きく変貌している: プログラマの思索

機械学習で反実仮想や自然実験が作れる: プログラマの思索

IT企業が経済学者を雇い始めた理由が面白い: プログラマの思索

社会現象や人間の心理に対し、こういう因果推論を経験則、法則として数多く見出すことができれば、それらは一つの規範を示す。
つまり、哲学の言う、ザイン(である・存在)ではなく、ゾルレン(かくあるべし・規範)を学問として提示できるはず。
最終的には、全ての文系学問の出てくる諸問題は、統計確率論を基盤としたPythonの機械学習や深層学習で実装されたモデルから導かれる規範を樹形図のように整理するだけで、自然科学の中の一つの学問分野に収斂されるのではないだろうか。

こういう技術が直近10年で当たり前になったのもすごいし、こういう技術を知らずに、今までの知識や技術に固執するのも一つのリスクだな、と思う。

| | コメント (0)

2020/12/18

Pythonデータ分析の気づき

Pythonデータ分析ライブラリでコーディングしていると、いくつか気づきがある。
初心者のラフなメモ。

【参考】
Pandas Cheat Sheetのリンク: プログラマの思索

ゆるふわPandasチートシートのリンク: プログラマの思索

scikit-learn「アルゴリズム・チートシート」のリンク: プログラマの思索

NumPyを図解で理解する: プログラマの思索

Python と R の違いのリンク: プログラマの思索

Numpyは普通の行列計算だが、常識と違う部分がある。
ブロードキャストとユニバーサルファンクション。
いずれも、行列の要素に一括計算できる。

2つの行列のShapeが違う場合に、ブロードキャストできるかどうかでまだ間違える。

Numpyのブロードキャストの挙動 - Qiita

NumPy♪ブロードキャストを雰囲気で理解していませんか? | Snow Tree in June

ゼロから作るDeep Learning」を読むと、シグモイド関数の計算でNumpyのブロードキャストがトリックとして上手く使われていると感じた。

Pandasは、SQLの代わりになること、グラフ表示の2つがある。
concat, merge, groupbyなど色々ある。
ExcelもCSVも読み込めるので、SQLの代わりとして、データの結合・抽出・マージ・分割が簡単にできる。

Pandasのグラフ表示は簡単だが、割と癖があるように思う。
MatplotLibとは使い方が微妙に異なるのでまだ間違う。

データフレームに利用人数、利用料金があったとする。
利用料金ごとの人数をヒストグラムで表示する場合、同じ結果を出すソースコードが4種類もある。

df["利用料金"].hist()
plt.show()

df["利用料金"].plot(kind='hist')
plt.show()

df["利用料金"].value_counts().plot.bar()
plt.show()

df["利用料金"].value_counts().plot(kind="bar")
plt.show()

Pandasでヒストグラムの作成や頻度を出力する方法 - DeepAge

とはいえ、Pandasに慣れると、Excelの表データがあれば、データ読み込み→データ集計と整形→折れ線グラフ・棒グラフ・散布図などでグラフ表示までの処理をスクリプトで簡単にかける。
VBマクロやExcelのピボットテーブルもいらない。
特に、散布図が簡単にかけるのはいい。

MatplotLibは多彩なグラフが書ける。
グラフの種類が多い。
plot, pie, bar, barh, scatter, hist, boxplot, corr。
積み上げ棒グラフも簡単。

グラフ要素を細かく設定できる。
枠線・折れ線・棒の色や太さ、凡例、タイトル、などなど。
引数の細かい仕様を覚えるのは面倒だが、凝った作りにできる。

skelarnは機械学習をお手軽に実践できる。
データをテスト・検証用データに分けて、fit→predictするだけ。
サンプル数が100程度でも十分に色々遊べる。

skelarnは、おおまかに、カテゴリで分類すること、回帰モデルで予測すること、の2つ。
アルゴリズムが多いので、どれがどの場面で有効なのか、1個ずつ、抑える。

モデル評価も、分類・回帰の2つ。
混同行列は「分類モデル」を評価する。
「回帰モデル」を評価するのは、MAE, MSE, RMSE, 決定係数の 4 つ。

ROC曲線を見て、最近、コロナニュースでよく聞く、偽陽性率と真陽性率の話も関係することが何となく分かってきた気がする。
そういうことを考えると、機械学習がこんなに簡単なPythonライブラリで初心者が簡単に扱えることがすごいし、統計やデータ分析を知らない専門家の話はアホかな、とか思う時もある。

機械学習をきちんと理解したいので、「Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎」を読み始めた。
他の本も色々立ち読みしてみたが、この本が初心者でも取り掛かりやすいように思った。

| | コメント (0)

2020/12/06

Pandas Cheat Sheetのリンク

Pandas Cheat Sheetを見つけたのでメモ。
他にも、Numpyとか色々あるので参考にする。
最初はこういうシートがあると参考になる

【参考1】
Pandas Cheat Sheet

Pandas Cheat Sheet(PDF)



【参考2】
(Cheat Sheet) Matplotlib: Plotting in Python - DataCamp

NumPy Cheat Sheet: Data Analysis in Python - DataCamp

Python For Data Science - A Cheat Sheet For Beginners - DataCamp

SciPy Cheat Sheet: Linear Algebra in Python - DataCamp

Pandas Cheat Sheet for Data Science in Python - DataCamp

Scikit-Learn Cheat Sheet: Python Machine Learning - DataCamp

Collecting Data Science Cheat Sheets | by Karlijn Willems | Towards Data Science

探せば色々あるね。
MatplotLibとかNumpyのチートシートも役立つ。

【参考3】
データサイエンスや機械学習のチートシートを最も効率的に収集する方法 - Qiita

FavioVazquez/ds-cheatsheets: List of Data Science Cheatsheets to rule the world

最初からここを探せばよかったかもしれない。
Pythonのデータ分析ライブラリ以外にも、RやSQL、Keras、ggplot2とか色々ある。

こういうチートシートは辞書代わりに使いたい。
こういう事がやりたい、という問題意識がある時に、どんな手法で実現できるか、ということを手早く知りたいから。


| | コメント (0)

2020/12/04

scikit-learn「アルゴリズム・チートシート」のリンク

scikit-learn「アルゴリズム・チートシート」があるのでメモ。

【参考】
【機械学習初心者向け】scikit-learn「アルゴリズム・チートシート」の全手法を実装・解説してみた - Qiita

Scikit-Learn のチート・シートに沿って機械学習 ? FRONT

Choosing the right estimator ? scikit-learn 0.23.2 documentation

scikit-learnで機械学習のプログラムを書こうとする時、ライブラリが多いので最初は戸惑う。
このチートシートがあれば、ああ、この時はこのライブラリを使うのね、と参考になる。

scikit-learnにあるサンプルデータで遊ぶだけでも割と面白いね。
やりたいのは、データを元に、因果関係を推論して、新たな因果関係という経験則を生み出すこと。
そういう道具がPythonで簡単に揃って使えるのは面白い。
業務システムをデータモデリングで考えるのとは別の発想。

| | コメント (0)

2020/10/31

アジャイル動画「私もアジャイルに飛びこんだの! -- 『品質重視のアジャイル開発』の誉田さんインタビュー」がいいね

アジャイル動画「私もアジャイルに飛びこんだの! -- 『品質重視のアジャイル開発』の誉田さんインタビュー」がいいと思ったのでリンクしておく。

私もアジャイルに飛びこんだの! -- 『品質重視のアジャイル開発』の誉田さんインタビュー ? アジャイル動画

「私もアジャイルに飛びこんだの!」というフレーズがとても可愛いのだが、誉田さんはNECでCMMIレベル5の導入運用に携わった人と聞いているので、そのギャップの違いに惹かれた。

『品質重視のアジャイル開発』を書いた動機は、色んな人から、アジャイル開発では品質保証はどうやっているのか?と聞かれて、その解答を自分から答えようとしたこと、と聞いて、すごく納得した。

実際、『品質重視のアジャイル開発』では、P.32で「顧客が納得するアジャイル開発の品質保証方法は確立されていない。本書は、その課題の解決に挑戦している」という言葉がある。
この言葉にすごくしびれた。

上記の動画では、誉田さんは、私は2010年頃からアジャイル開発に携わったので、平鍋さん他皆さんとはそこまでアジャイル開発の経験を持っていないと謙遜されていたが、『品質重視のアジャイル開発』の内容はとても充実していると思う。

上記の動画の最後でも紹介されているが、アジャイル開発はミニWF型開発ではない。
アジャイル開発はミニWF型開発とみなしてしまうと、必ず大火傷を負う。
それはなぜか?

アジャイル開発の特徴はとにかく期間が短いことだ、と著者は言う。
WF型開発では半年かけて、各工程にゲートを設けて品質チェックし、品質を担保していく。
そのやり方をアジャイル開発にそのまま適用しても、短期間の制約があるから、必ず現場が混乱する。

一方で、WF型開発の品質保証で得られた知見である「プロセス品質」「プロダクト品質」の考え方はアジャイル開発にも通用する。
アジャイル開発でもその考え方を適用する。
プロセス品質では、技術プラクティスを習慣にし、開発チームの構成に配慮すること。
プロダクト品質では、Done判定を出荷判定基準とみなし、バックログの順番に頻繁に品質保証していくこと。

個人的には、「Done判定を出荷判定基準」とみなす観点は有効な知見だと思う。
ソフトウェア品質保証は、WF型開発でもアジャイル開発でも、同じような概念や観点は共通で存在するし、その背景には、品質はどんな開発プロセスであれ必要なのだ、という思想があるのだと思う。

また、『品質重視のアジャイル開発』では、アジャイル開発にもWF型開発のメトリクス分析を適用しようとして、色々苦労されている内容がある。
結論は、定量データを用いてアジャイル開発のプロセスを分析するのは難しい、ということだ。
理由は、アジャイル開発では、短期でリリースするので、スプリント単位の開発規模は小さいために、メトリクスのばらつきが大きくなるからだ。
すなわち、開発規模やチームの生産性のばらつきが大きいために、Velocityで複数チームの生産性を比較するのは有意味なりにくいし、各チームの開発状況を分析するのが難しいのだ。

考えてみれば、規模が小さいのでばらつきが大きくなる、というのは当たり前なのだが、結局、短期間リリースと定量データ分析はトレードオフなのかな、と感じる。

また、『品質重視のアジャイル開発』本は、品質保証の観点で噛み砕いて解説してくれているので、WF型開発バリバリのプロジェクトリーダーがアジャイル開発に取り組む時に役立つと思う。

| | コメント (0)

より以前の記事一覧