見出し画像

AI 実装検定への道(2)

AI 実装検定 A級合格へ向けて学習を進めています。

前回投稿が最初で、プログラミングの章の導入部分について書いてみました。コードの初歩的な部分から、配列(行列)の生成、「Matplotlib」「NumPy」「pandas」などのライブラリを利用を進めました。

今回は、Visual Studio Code利用においても初期に勉強したpandasのデータフレーム型に花の「アヤメ」の品種を分類するデータセット(iris)を読み込ませると言うところから再開します。(公式テキスト160ページ)

ここまでに公式テキストでは135ページから進め、160ページまで25ページ分進んでいます。まだ初歩的なPythonの勉強ですが、あくまでもAI 実装検定合格の目的の勉強なので、ディープラーニング理解に向けた配列(行列)に関することの勉強が進んでいきます。若干、面白みがないかもしれませんが、我慢我慢で進めていきます。

花の「アヤメ」の品種を分類するデータセット(iris)を見てみる

(コード記述)
import pandas as pd
from sklearn import datasets

iris = datasets.load_iris()df = pd.DataFrame(iris.data,columns=iris.feature_names)
print("type *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*")
print(type(df))
print("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*")
print()
df.head()

import pandas as pdによりライブラリ「pandas」を使う指示をして、機械学習のライブラリ「sklearn」からdatasetsを使う指示を記します。
そのdatasetsは花のアヤメの品種を分類する「iris」として、表計算の形式(DataFrame)に表す指示をします。その後、表題を表す部分をprintで3行示し、空白行を1行(print())、そして「DataFrame」には最初の5行だけ取り出すものとしてdf.head()と書かれています。ここでdfとだけ書けば、全部取り出されるらしい・・・何行になるやら怖いのでやめておきます。

(結果)
type *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
<class 'pandas.core.frame.DataFrame'> *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
 sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0   5.1        3.5       1.4       0.2
1   4.9        3.0       1.4       0.2
2   4.7        3.2       1.3       0.2
3   4.6        3.1       1.5       0.2
4   5.0        3.6       1.4       0.2

Sepalは「がく片」を表し、その長さと幅の数値ならびにPetalは「花弁」を表し、その長さと幅を表したデータとなります。

コード記述において、最後の行のdf.head()の括弧の中に10を入れてやると、こんなふうに10行目まで抽出されました。

(結果2)
type *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
<class 'pandas.core.frame.DataFrame'> *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
 sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0    5.1       3.5       1.4       0.2
1    4.9       3.0       1.4       0.2
2    4.7       3.2       1.3       0.2
3    4.6       3.1       1.5       0.2
4    5.0       3.6       1.4       0.2
5    5.4       3.9       1.7       0.4
6    4.6       3.4       1.4       0.3
7    5.0       3.4       1.5       0.2
8    4.4       2.9       1.4       0.2
9    4.9       3.1       1.5       0.1

Pythonで繰り返し処理(for文)

for 文は下記の様に表すのが、基本だそうです。

for 変数 in [配列]:
繰り返す処理

[配列]の後には、必ず「:」(コロン)を置き、繰り返し処理の前にはスペース4つ分の空白を設けることが必要とのこと。次に、Hello!を繰り返す構文を見ていきます。

(コード記述)
for i in[0,1,2,3,4]:
print("Hello!")

(結果)
Hello! Hello! Hello! Hello! Hello!

コードでは、for 文で、i が0〜4まで取り出され、そこにprintで示された「Hello!」を表示するというふうに記されています。ここでは、i と記されていますが i ではなく、_(アンダーバー)としても結果は同じとなります。

(コード記述)
for _ in[0,1,2,3,4]:
print("Hello!")

(結果)
Hello!
Hello!
Hello!
Hello!
Hello!

今度は、printの指示の部分に、i を入れてみます。

(コード記述)
for i in[0,1,2,3,4]:
print(i)

(結果)
0
1
2
3
4

コードでは、for 文で、i が0〜4まで取り出され、printにはその i を表示するというふうにしているわけですから、そのまま0〜4まで順に表示されるというもの。これが、数字ではなくアルファベットに置き換わっても、表示される結果は同じ様なものとなります。

(コード記述)
for ii in["a","b","c","d","e"]:
print(ii)

(結果)
a
b
c
d
e

最初の構文の様に[0,1,2,3,4]と書くのもありですが、range関数を利用して対象をある幅で処理することも可能みたいです。

(コード記述)
for i in range[1:10]:
print(i)

(結果)
1
2
3
4
5
6
7
8
9

ここで注意せねばならないのは、range[1:10]:の使い方。
最初の1は初期値を表します。次の10は終了値の次の数値であるようです。少しアレンジしてみましょう。初期値を5にして、終了値の次の数値を12に変えてみます。

(コード記述)
for i in range[5:12]:
print(i)

(結果)
5
6
7
8
9
10
11

と結果が出てきます。初期値を省いて、range[7]: とだけにしてみましょう。

(コード記述)
for i in range[7]:
print(i)

(結果)
0
1
2
3
4
5
6

この通り、初期値0から7の前の6までが表示されました。
このfor 文を2つ繰り返して、それに計算式を付け足してやると九九を表すことができます。

(コード記述)
for i in range(1,10):
for j in range(1,10):
print(i,"×",j,"=",i*j)

i を初期値1から10の手前までの数値とし、j も同様に幅を示します。
その次に、print構文で、i の値の次に「×」、そしてj の値、「=」、その次に i*j の結果を表示せよ、との内容です。

(結果)
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
1 * 4 = 4
1 * 5 = 5
1 * 6 = 6
1 * 7 = 7
1 * 8 = 8
1 * 9 = 9
2 * 1 = 2
 (中略)
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81

ちょっと面白くなってきましたね。

Pythonで条件分岐(if 文)

Excelにも if 関数がありますが、基本的には考え方は似ているようです。

if 文
if 条件:(コロン)
条件が正しい場合の処理

A=80と先に示し、条件としては70点以上の場合「合格です!」と表示する構文です。

(コード記述)
A=80

if A>=70:
print("合格です!")

この場合、A=69 とすると、もちろん何も返されません。少し寂しいので、それ以外の場合には「再チャレンジしよう!」と応援メッセージを表示するようにします。

(コード記述)
A=60

if A>=70:
print("合格です!")
else:
print("再チャレンジしよう!")

このように、そうでない場合は・・・と「else:」を用いてパターン化してやるわけですね。では、もっと多くのパターン分けが必要な場合はどうでしょうか?60点以上取れた場合には、「おしい!」と表してみましょう。

(コード記述)
A=62

if A>=70:
print("合格です!")
elif 60<A<=69:
print("おしい!")
else:
print("再チャレンジしよう!")

ここでも、必ず「:」(コロン)の記述を忘れないようにしよう。
忘れてると、エラーになってしまいます。

69の後ろに「:」がないとエラーになる!

公式テキストでは、もう少し分岐のある構文を勉強します。
次に、もう少し関数を学んでいきましょう。

Python で関数

公式テキストでは171ページに進んでいます。
なんだか難しい表記ですが、関数は、繰返しや条件分岐などの命令を1つのセットとしてまとめたものであり、この関数にわたす数値を引数、処理した結果を返り値と呼ぶそうです。(これもテストに出るんだろうか??)

関数
def 関数名(引数):(コロン)
 関数が行う処理
 return 返り値

では、引数をXと表し、5を足した結果について、Xが3の時と9の時の結果(返り値)をみていきましょう。

(コード記述)
def func(X):
 ans = X+5
 return ans

print(func(3))
print(func(9))

(結果)
8
14

引数を固定しないで、ランダムな数値を利用した場合を考えよとのこと。サイコロを振ってでための数を答えさせるという仕様です。まずは、コードを見てみましょう。

(コード記述)
import random
def dice():
 M=[1,2,3,4,5,6]
 return random.choice(M)
result=dice()
print("サイコロの目は、",result,"です。")

最初の行の「random」というのがランダムな値を生成するものだそうです。3行目でサイコロに相当する目の数を1〜6と示します。その次の行には「random」を利用してMからチョイスすると書かれています。で、結果を得てprint構文で「サイコロの目は、(result)です。」と表す仕組みです。

さすが「random」さん、何回実行してもまた違う数値を返してくれますね。これを利用したパスワード生成プログラムなんてのも簡単に作れそうですね。次に for文を利用してサイコロを10回振った場合を示してみます。

(コード記述)
import random
for i in range(1,11):
 def dice():
  M=[1,2,3,4,5,6]
  return random.choice(M)

 result=dice()
 print(i,"回目に振ったサイコロの目は、",result,"です。")

2行目にfor 文を入れ込み、レンジを初期値1回目から、11の前まで(つまり10回目まで)サイコロを振ると設定します。その結果を、最終行にて「( i )回目に振ったサイコロの目は、(result)です。」と返してやる分けですね。

これも少し楽しいですね。
何回実行しても違う答えを返してくれるのが「random」さんの面白いところでした。

さてさて、今日はここまでにします。

今回は、「pandas」を使い、機械学習のライブラリ「sklearn」からdatasetsを使う方法を学び、花のアヤメのがく片と花びらの長さと幅の数値を表示すること、for 文、if 文、さらには関数を利用するところまで進めました。次は、なんだか難しそうなシグモイド関数(sigmoid)をみていくことになるようです・・・難しそうですが、頑張って進めていきます。


この記事が気に入ったらサポートをしてみませんか?