俺人〜OREGIN〜俺、バカだから人工知能に代わりに頑張ってもらうまでのお話

俺って、おバカさんなので、とっても優秀な人工知能を作って代わりに頑張ってもらうことにしました。世界の端っこでおバカな俺が夢の達成に向けてチマチマ頑張る、そんな小さなお話です。現在はG検定、E資格に合格し、KaggleやProbSpaceのコンペに参画しながら、Pythonや機械学習、統計学、Dockerなどの勉強中です。学習したことをブログにアウトプットすることで、自分の身に着けていきたいと思います。まだまだ道半ばですが、お時間がありましたら見て行ってください。

エピソード2-12: pandasでDataFrameを扱ってみる〜 E資格への道〜

今回は、pandasでDataFrameを扱ってみたいと思います。

DataFrameは、エクセルのように二次元のデータを、行(レコード)と列(項目、カラム)でラベルをつけて、扱えるオブジェクトです。

pandasは、1行のレコードや、1列のカラムを扱う、Seriesというオブジェクトも提供しています。

では、早速試してきます。

 

 0. まずは、numpyライブラリとpandasライブラリをimport。

f:id:kanriyou_h004:20190414183749p:plain
「import numpy as np」とすることで、「np」にて参照し、各種関数や定数を呼び出すことができます。

「import pandas as pd」とすることで、「pd」にて参照し、各種データを扱う関数を呼び出すことができます。

「from pandas import DataFrame,Series」とすることで、DataFrame,Seriesが扱うことができます。 

 1. 二次元のarrayオブジェクトをDataFrameに変換する。

f:id:kanriyou_h004:20190414183328p:plain

randint()の引数に、乱数の範囲と行列のサイズ(5×2)を渡して、サイコロを2個、5回転がした時の出目を、arrayオブジェクトに格納します。

f:id:kanriyou_h004:20190414184324p:plain

DataFrame()の引数に、arrayオブジェクトと、オプションとしてcolumns=[列名,列名,....]を指定することで、行と列にラベルをつけた、DataFrameに変換できます。

行は、0からの数字が自動的に付与されます。

 

2. Seriesオブジェクトから、DataFrameを作成する。

f:id:kanriyou_h004:20190414185155p:plain

Series()の引数に、リストとオプションでname=シリーズの名前を指定することで、名前をつけたSeriesを作成することができます。

まず、都市のSeriesを作成しました。

f:id:kanriyou_h004:20190414190120p:plain
同様に、気温と、湿度のSeriesを作成しました。

欠損は、np.nanで指定することができます。

f:id:kanriyou_h004:20190414190314p:plain

DataFrame()の引数として、ディクショナリ{ }で各列のcolumns名とSeriesオブジェクトを渡すことで、DataFrameが作成できます。
 

3. DataFrameに行を追加する。

f:id:kanriyou_h004:20190414191722p:plain

Series()の引数に追加する1行のリストと、オプションindex=[列名,列名,....]を指定することで、追加する1行分のSeriesを作成します。

「 1. 二次元のarrayオブジェクトをDataFrameに変換する。」で作成した、サイコロ2個5回分のDataFrameに、append()メソッドの引数に、追加する1行分のSeriesと、オプションignore_indes=Trueを指定することで、行が追加されます。

 4. DataFrameに列を追加する。

f:id:kanriyou_h004:20190414192629p:plain

列の追加には、DataFrameオブジェクトのindexにcolumns(列名)を指定して、arrayオブジェクトを渡すことで、追加することができます。

 

 5. DataFrameを結合する。

f:id:kanriyou_h004:20190414205913p:plain

DataFrameのappend()メソッドの引数に、DataFrameを渡すことで、DataFrameの結合ができます。

f:id:kanriyou_h004:20190414210141p:plain

ただし、indexが連番とならないところに注意が必要です。

連番にする場合は、ignore_index=Trueを引数に指定する必要があります。

f:id:kanriyou_h004:20190414210400p:plain

append()メソッドの引数に、オプションignore_index=Trueを指定することで、indexも連番にすることができました。

 

今回は、DataFrameを一通り使ってみました。

エクセルのように、行毎、列毎の処理が便利に使えました。

SQLとも似た色々な処理ができるので、重宝しそうです。

では、引き続き、頑張って勉強していきたいと思います。

 

 2019年3月9日(土)にG検定を受験し、見事合格できました!

受験の体験記や勉強法などを別のブログにまとめました。

これから受験される方がいらっしゃいましたらご参考まで。

g-kentei.hatenablog.com

エピソード2-11: Pythonで複数のグラフを表示してみる〜 E資格への道〜

今回は、matplotlibで複数のグラフを描いてみます。 

データの前処理等を行うにも、数字の羅列だけを見るよりもグラフ化した方が見通しがよくなるので、必須の処理になります。

では、早速試してきます。

 

 0. まずは、お約束のnumpyライブラリとmatplotlibライブラリをimport。

f:id:kanriyou_h004:20190413002759p:plain
「import numpy as np」とすることで、「np」にて参照し、各種関数や定数を呼び出すことができます。

「import matplotlib.pyplot as plt」とすることで、「plt」にて参照し、各種グラフ化に必要な関数を呼び出すことができます。

 1. add_subplot()で、グラフの表示する位置のオブジェクトを取得し、scatter(),plot()でグラフを描く。

f:id:kanriyou_h004:20190413004921p:plain
plt.figure()にfigsize=(グラフを描くエリアのサイズ)を引数として渡すことで、エリア全体をオブジェクトとして取得できます。

そのオブジェクトのadd_subplot()メソッドの引数に、縦の分割数、横の分割数、分割したエリアの何番目に表示するかの3つの引数を渡すことで、分割したエリアの一つをオブジェクトとして取得できます。

取得した書くエリアごとにscatter()やplot()でグラフを描画します。

【出力結果】

f:id:kanriyou_h004:20190413005617p:plain

scatter()や、plot()の使い方については、以下の過去記事をご参照ください。

oregin-ai.hatenablog.com

 

2. タイトルやX軸、Y軸の描画範囲、軸名称を指定する。

f:id:kanriyou_h004:20190414174846p:plain

add_subplot()で取得したオブジェクトの、set_title()メソッドでグラフのタイトルを、set_xlim(),set_ylim()メソッドでX軸、Y軸の範囲を、set_xlabel(),set_ylabel()でX軸、Y軸のラベルを、設定して表示に反映することができます。

実行した結果が以下の通りです。

f:id:kanriyou_h004:20190414175424p:plain

 

 

今回は、複数のグラフを表示してみました。

色々な視点からデータを見ることで、見えてくる特徴もあるので、これから重宝しそうです。

では、引き続き、頑張って勉強していきたいと思います。

 

 2019年3月9日(土)にG検定を受験し、見事合格できました!

受験の体験記や勉強法などを別のブログにまとめました。

これから受験される方がいらっしゃいましたらご参考まで。

g-kentei.hatenablog.com

エピソード2-10: 乱数の取得〜 E資格への道〜

今回は、Numpyで乱数を取得する方法を学びます。 

randamモジュールを利用することで、様々な乱数を取得することができます。

では、早速試してきます。

 

 0. まずは、お約束のnumpyライブラリをimport。

f:id:kanriyou_h004:20190330212710p:plain

「import numpy as np」とすることで、「np」にて参照して、各種関数や定数を呼び出すことができます。

 1. np.random.rand()で、一様分布から実数の乱数を取得する。

f:id:kanriyou_h004:20190410215018p:plain

np.random.rand()に引数を渡さない場合は、0以上、1未満の一様分布からの実数値の乱数を一つ取得できます。

f:id:kanriyou_h004:20190410215348p:plain

np.random.rand()の引数に取得したい個数を指定することで、一様分布からの指定した個数の乱数がarrayで取得できます。

f:id:kanriyou_h004:20190410215601p:plain

np.random.rand()の引数に行列のサイズを渡すことで、一様分布から指定したサイズの乱数がarrayで取得できます。

2. np.random.randint()で、一様分布から整数の乱数を取得する。

f:id:kanriyou_h004:20190410221215p:plain

np.random.randint()の引数に取得したい乱数の範囲を指定することで、一様分布からの乱数を取得できます。

2つ目の引数の数字は含まれないことに注意が必要です。

f:id:kanriyou_h004:20190410221738p:plain

np.random.randint()の引数の三つ目に取得したい乱数の個数を指定することで、指定した個数の整数の乱数がarrayで取得できます。

3. np.random.normal()で、正規分布からの実数の乱数を取得する。

f:id:kanriyou_h004:20190410223104p:plain

np.random.normal()の引数に、loc=(平均)、scale=(標準偏差)、size=(個数)を指定することで、指定した平均、標準偏差正規分布からの実数の乱数を指定した個数arrayで取得できます。

f:id:kanriyou_h004:20190411214318p:plain

sizeに行列のサイズを指定することで、指定したサイズで正規分布からの乱数を取得することができます。 

f:id:kanriyou_h004:20190411214546p:plain

パラメータ名を省略しても取得可能です。

4. matplotlib.pyplotオブジェクトのhist()メソッドで取得した乱数をヒストグラム化する。

f:id:kanriyou_h004:20190411215351p:plain


matplotlib.pyplotオブジェクトのhist()メソッドに取得した乱数(array)と、bins=階級数(棒の数)を引数に渡すことで、ヒストグラムで表示できます。(今回の場合、平均0、標準偏差3の正規分布の形状になります。)

arrayオブジェクトは、reshape()メソッドにサイズを指定することで行列のサイズを変更することができます。

 

今回は、一様分布と正規分布からの乱数の取得ができるようになりました。

乱数が取得できることは基礎の基礎なので、これをどう活用して行くかは、これから徐々に学んで行きたいと思います。

では、引き続き、頑張って勉強していきたいと思います。

 

 2019年3月9日(土)にG検定を受験し、見事合格できました!

受験の体験記や勉強法などを別のブログにまとめました。

これから受験される方がいらっしゃいましたらご参考まで。

g-kentei.hatenablog.com

エピソード2-9: Numpyで行列の作成と変形〜 E資格への道〜

今回は、Numpyで行列の作成と変形を学びます。 

arrayオブジェクトを利用することで、行列の作成と変形が超簡単にできてしまいます。

では、早速試してきます。

 

 0. まずは、お約束のnumpyライブラリをimport。

f:id:kanriyou_h004:20190330212710p:plain

「import numpy as np」とすることで、「np」にて参照して、各種関数や定数を呼び出すことができます。

 1. np.zeros()で、全ての成分がゼロの行列を作成します。

f:id:kanriyou_h004:20190409221044p:plain

np.zeros()の引数にサイズを指定することで、指定したサイズの成分が全てゼロの行列を作成できます。

かっこが二重になるところに注意が必要です。

(引数にタプル(行、列)を渡すことになります。)

2. np.ones()で、全ての成分が 1 の行列を作成します。

f:id:kanriyou_h004:20190409221445p:plain

np.ones()の引数にサイズを指定することで、指定したサイズの成分が全て1の行列を作成できます。

3. np.eye()で、単位行列を作成します。

f:id:kanriyou_h004:20190409221818p:plain

np.eye()の引数にサイズを指定することで、指定したサイズの単位行列を作成できます。

ゼロ行列等と違い、引数には整数を一つ指定する点に注意です。

4. arrayオブジェクトのreshape()メソッドで行列のサイズを変更する。

f:id:kanriyou_h004:20190409222458p:plain

arrayオブジェクトは、reshape()メソッドにサイズを指定することで行列のサイズを変更することができます。

5. arrayオブジェクトのvstackメソッド,hstackメソッドで行列を結合する。

f:id:kanriyou_h004:20190409223536p:plain

np.vstack()の引数に行列を渡すことで、縦に行列が結合できます。

同様にnp.hstack()の引数に行列を渡すことで横に行列が結合できます。

 

今回は、行列の作成と、行列の変形について学びました。

だいぶ行列の扱いに慣れてきました。

では、引き続き、頑張って勉強していきたいと思います。

 

 2019年3月9日(土)にG検定を受験し、見事合格できました!

受験の体験記や勉強法などを別のブログにまとめました。

これから受験される方がいらっしゃいましたらご参考まで。

g-kentei.hatenablog.com

エピソード2-8: Numpyで行列のブロードキャストルールを学ぶ〜 E資格への道〜

今回は、Numpyで行列のブロードキャストルールを学びます。 

arrayオブジェクトのスカラー演算は、各成分に対する演算となります。

これがブロードキャストルールと呼ばれるとのこと。

では、早速試してきます。

 

 0. まずは、お約束のnumpyライブラリをimport。

f:id:kanriyou_h004:20190330212710p:plain

「import numpy as np」とすることで、「np」にて参照して、各種関数や定数を呼び出すことができます。

 1. リスト形式を、np.array()に引数として渡す。

f:id:kanriyou_h004:20190408215836p:plain
a,b,c,dに乱数で整数を格納して、np.array()の引数として渡すことで、

行列をarrayオブジェクトに格納できます。

2. 行列にスカラーを掛ける。

f:id:kanriyou_h004:20190408220134p:plain

行列にスカラーを掛けることで、各成分のスカラー倍の行列が計算できます。

f:id:kanriyou_h004:20190408220229p:plain

スカラー倍なので、逆からかけても同じ結果が得られます。

3. 行列のべき乗や足し算を計算する。

f:id:kanriyou_h004:20190408220519p:plain

数学的には無い計算なのですが、行列のべき乗を計算することで、各成分をべき乗した行列が計算できます。

f:id:kanriyou_h004:20190408220806p:plain

同様に、行列に数値を足すと、各成分に数値を加えた行列が計算できます。

4. 行列同士のスカラー演算を実施する。

f:id:kanriyou_h004:20190408221500p:plain

行列同士のスカラー演算(掛け算)を実施すると、各成分同士の掛け算した行列が求められます。

f:id:kanriyou_h004:20190408221722p:plain

同様に足し算、引き算、べき乗も各成分同士で演算された行列が求められます。

 

ブロードキャストルールを使うことで、行列の各成分同士のスカラー演算ができることがわかりました。

数学的には無い計算方法ですが、すごく便利なので、活用して行きたいと思います。

ちなみに、サイズの違う行列同士でも計算できるとのことですが、ルールが理解しきれなかったので、今回は、同サイズの行列に絞って学習しました。

では、引き続き、頑張って勉強していきたいと思います。

 

 2019年3月9日(土)にG検定を受験し、見事合格できました!

受験の体験記や勉強法などを別のブログにまとめました。

これから受験される方がいらっしゃいましたらご参考まで。

g-kentei.hatenablog.com

エピソード2-7: Numpyで行列を扱ってみる〜 E資格への道〜

今回は、Numpyで行列を扱ってみます。 

行列は、Numpyのarrayオブジェクトを利用して簡単に扱うことができます。

学生の頃、行列の計算には悪戦苦闘していたので、逆行列も簡単に計算できるNumpyは、もはや、神ツールの域に感じました。

では、早速イジっていきます。

 

 0. まずは、お約束のnumpyライブラリをimport。


f:id:kanriyou_h004:20190330212710p:plain

「import numpy as np」とすることで、「np」にて参照して、各種関数や定数を呼び出すことができます。

 1. リスト形式を、np.array()に引数として渡す。


f:id:kanriyou_h004:20190407211317p:plain

a,b,c,dに乱数で整数を格納して、np.array()の引数として渡すことで、

\begin{pmatrix} a & b \\ c & d \end{pmatrix}

の行列をarrayオブジェクトに格納できます。

2. 行列の積を、np.dot()で計算する。


f:id:kanriyou_h004:20190407213341p:plain

np.dot()の引数に、行列を渡すことで、行列の積が計算できます。

手計算だと恐ろしく手間がかかるので、こんなに簡単に計算できると、もうNumpyが手放せません。

3. 逆行列を、np.linalg.inv()で計算する。


f:id:kanriyou_h004:20190407213748p:plain

逆行列もnp.linalg.inv()の引数に、行列を渡すことでいとも簡単に計算できます。

4. 転置行列を、T属性で計算する。


f:id:kanriyou_h004:20190407214137p:plain

転置行列は、arrayオブジェクトのT属性で計算できます。

 積や逆行列と違い、Numpyの関数ではなく、arrayオブジェクトのT属性で計算する点に注意が必要です。

5. ベクトルを、n×1の行列で定義する。


f:id:kanriyou_h004:20190407215118p:plain

ベクトルは、n×1の行列で定義することで、行列との掛け算などができます。 

 

f:id:kanriyou_h004:20190407220612p:plain

ベクトルの内積も、np.dot()の引数の一つ目のベクトルを転置することで、計算できます。

f:id:kanriyou_h004:20190407220928p:plain

ベクトルのクロス積は、np.dot()の引数の二つ目のベクトルを転置することで計算できます。

 

Numpyを使うことで、行列やベクトルの計算がいとも簡単に実施することができました。

これで、ベクトル計算に手間を取られたり計算ミスをしたりすることなく、大量のデータを計算することができます。

とてもありがたいです!

では、引き続き、頑張って勉強していきたいと思います。

 


 2019年3月9日(土)にG検定を受験し、見事合格できました!

受験の体験記や勉強法などを別のブログにまとめました。

これから受験される方がいらっしゃいましたらご参考まで。

g-kentei.hatenablog.com

AI・人工知能EXPOに行ってきました(その3)AI・人工知能基礎講座

先日、情報収集のためにAI・人工知能EXPOに行ってきました。

恐ろしいほどの混雑ぶりで、びっくりしました。

3つの特別講演を受講してきたのでレポートの第三弾を投稿します。

f:id:kanriyou_h004:20190404211403j:plain

3つ目は、以下の特別講演です。

AI-6 <基礎講座>

AI・人工知能基礎講座

~AI活用の現状と今後の可能性~

人工知能学会 会長/三菱ケミカルホールディングス

先端技術・事業開発室

デジタルトランスフォーメーショングループ

Chief Digital Technology Scientist

浦本 直彦氏  

 

この講演は、G検定でやった範囲の内容だったので、すごくよくわかった!!

しかも実例交えての講義だったので、すごく勉強になりました。

 

人工知能とは何か

結論としては、研究者の中でも見解が別れており「明確な定義がない」のが現状。(むしろ、どんどん進化して変化しているといったところでしょうか。)

いろんな見解があるので、相手が使っている「人工知能」という言葉が何を意図しているか認識を合わせておかないと危ないと感じました。

 

人工知能の発展

人工知能は、過去に2度のブームがあり、ブームの度に冬の時代を迎え、現在3度目のブームを迎えています。

3度目のブームは、

といった背景から、これまでとは違った発展を遂げています。

デジタル化の波により、データを持っている企業が人工知能の発展を牽引しているとともに、Pythonなどで、簡単に使えるモジュールが広まったことで、人工知能開発が誰でも行える民主化がどんどん進んでいるという点で、これまでのブームとはプレイヤーが違ってきています。

人工知能のトレンド

画像認識や音声認識の分野では、ディープラーニングが大いに活用され、音声アシストや、チャットボットなど実社会にも適用されてきています。

今後さらに実社会に適用されてくると、人々の生活や人命に良くない影響を及ぼすことが危惧されてきています。

様々な場で、人工知能の倫理的観点からの議論が始まってきているとのことでした。

具体的には、

といった観点で議論されているとのことでした。
また、価値共創の観点で、人と人工知能が協力しあって新たな価値を創造していく取り組みも実施されているとのことでした。
例えば
  • 人間と人工知能でタッグを組んで実施するアドバンストチェス
  • 人工知能が作曲して、人間が歌う
  • 人工知能がレシピを考え、人間が調理する
  • 人工知能が行うサービスを、人間が窓口業務でフォローする

 

④まとめ

  • 人工知能が何かをしてくれる」のではなく、人工知能のできることを理解し「人工知能を使って何をする」を考える必要がある。
  • デジタル化により単なるブームから社会に浸透する段階にきている。
  • 浸透に伴って発生する課題への取り組みが始まっている。
  • 複雑でクリティカルな課題に向き合うためには、今後も様々な人に活発な議論に参加してもらうことで、健全なサービスを提供していく必要がある。

 

G検定受験時に勉強した範囲が主な内容だったので、すごく理解できました。

また、AI・人工知能EXPOという熱気を帯びた会場内で熱いまなざしを向ける業界の方々と席を並べて、人工知能業界トップクラスの方々の生の声をお伺いできたことで、学習したことが実体験として体に入ってきました。

やっぱり、独学だけでなく「教師あり学習」が重要ですね(笑)

次回のAI・人工知能エキスポにも是非参加したいと思います! 

 

 2019年3月9日(土)にG検定を受験し、見事合格できました!

受験の体験記や勉強法などを別のブログにまとめました。

これから受験される方がいらっしゃいましたらご参考まで。

g-kentei.hatenablog.com