Pythonを用いた機械学習5日目
前回から複数回に分けて、機械学習に必要な統計の基礎知識を学んでいくための、前提知識として数列や集合などについて学んでいる。今回は、集合と内包表記についてまとめていく。
前回の記事はこちら。数列やシグマに関することをまとめている。noteに数列が貼れないので割愛。
1.集合と内包表記
数列では順番が大事だが、順番が必要でない場合(単純にグループに分けたい場合)は、「集合」を使う。1〜7までの整数を1, 3, 5, 7とその他に分けたい場合、A = {1, 3, 5, 7}とB = {2, 4, 6}と表すことができる。
・要素:集合に含まれる一つ一つ
・有限集合:要素が{1, 3, 5, 7}のように有限個の集合
・無限集合:「偶数」や「整数」というような無限個の要素がある集合
・内包表記:{n|nは奇数}や{x|xは実数、0≦x≦1}というように無限集合を表す
2.実際のPythonコード
他言語と同じようにPythonでもリストやタプルを使って表現する
・リストをつくるコード
>>> a = [1, 3, 5, 7]
>>> b = [2, 4, 6]
例1) 次の集合をPythonで書いてみよう。
{x|xは10未満の自然数}
・リスト内包表記を使ったコード
>>> a = [x for x in range(1, 10)]
>>> print(a)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>
要素の個数が多い場合はrange関数を用いると効率よくリスト生成ができる
・リスト内包表記を使って多重リストの生成
>>> b = [[i + j for i in range(3)] for j in range(4)]
>>> print(b)
[[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4, 5]]
>>>
これは、多重リストを初期化するときにも使える
注意1)多重リストを初期化するときにリスト内包表記を使わない場合、思った結果が出ない場合もある
・多重リストを初期化
>>> b = [[0] * 3] *4
>>> print(b)
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>>
・代入すると、想定と異なる結果
>>> b = [[0] * 3] *4
>>> b[1][2] = 5
>>> print(b)
[[0, 0, 5], [0, 0, 5], [0, 0, 5], [0, 0, 5]]
>>>
・リスト内包表記を使った正しい結果
>>> c = [[0 for i in range(3)] for j in range(4)]
>>> c[1][2] =5
>>> print(c)
[[0, 0, 0], [0, 0, 5], [0, 0, 0], [0, 0, 0]]
>>>
3.集合を扱うときに便利なset型
・set型:集合を扱う際に便利な型。要素の重複や順番を意識しなくて良い。集合に対する演算が用意されている。
・集合を操作するコード
>>> a = set([2, 4, 5])
>>> b = set([3, 4, 6])
>>> print(a)
{2, 4, 5}
>>> print(a & b)
{4}
>>> print(a - b)
{2, 5}
>>> print(a | b)
{2, 3, 4, 5, 6}
>>>
1、2行目:集合A、集合Bをそれぞれ作成
5行目:集合Aと集合Bの積集合を表示
7行目:集合Aと集合Bの差集合を表示
9行目:集合Aと集合Bの和集合を表示
次回は、平均・分散・標準偏差といった統計の基礎的な手法について学んでいく。