TensorFlowについて
特徴
Googleのもとで開発が行われているニューラルネットワーク(NN)を使った機械学習ライブラリである。
読みは「テンソルフロー、テンサーフロー」である。
NNは人間の脳を再現した仕組みであるため注目されている分野の一つである。
便利な点
どのような環境下でもほぼ変更なしで実行が可能である。
また、AI開発を行う際に便利なドキュメントやチュートリアルが多く公開されているため行き詰まることがあまりない。
利用
Googleが開発したこともあり、Googleの音声検索や言語翻訳、画像検索に使用している。
また、監視カメラを使って顔認識システムにも使われている。
1. 監視カメラに映った画像から顔を識別
2. 顔写真が多数登録されているデータベースと照合
3. データベースに登録されている情報から人物を識別
4. これにより特定人物を世界中の監視カメラより探すことが可能
この他にも使用されているためますます利用されるだろう。
参考サイト
Pandasについて
ファイルを読み込む
txtとcsvは呼び出す関数は同じだが区切り文字が異なっているので使う時に意識する。 カンマ、タブでない場合は「sepまたはdelimiter」で区切り文字が設定可能である。
txt: read_table()
区切り文字がタブ「 \t 」である。
import pandas as pd df = pd.read_table('File_Path/sample.txt')
csv: read_csv()
区切り文字がタブ「 , 」である。
import pandas as pd df = pd.read_csv('File_Path/sample.csv')
parquet: read_parquet()
import pandas as pd df = pd.read_parquet('File_Path/sample.parquet')
json: read_json()
import pndas as pd df = pd.read_json('File_Path/sample.json') JSONLを読む込場合はオプションをつける df = pd.read_json('File_Path/sample.json', lines=True)
引数
- headerなし: 「 , header=None 」
- header指定: 「 , header=始めたい行番号を指定 」
- indexなし: 「 , index=Flase 」
- index指定: 「 , index_col=始めたい列番号を指定 」
- 特定の列指定: 「 , usecols=[読み込む列番号/名を指定] 」
複数ファイルを読み込む
同じような名前のファイルを一気に読み込んで参照したい時がある。 その際の対応方法が下記となる。
import pandas as pd from glob import glob all_files = glob('PATH') list = [] for file in all_files: # xxx部分は読込ファイルに合わせて変更 list.append(pd.read_xxx(file)) df = pd.concat(list)
ファイルを出力する
csv
import pandas as pd df = pd.read_csv('sample.csv', header=None) df.to_csv('new_sample.csv', header=None, encoding='utf-8')
文字列を抽出(完全/部分一致)
文字列抽出
pandas.DataFrameで行を抽出(選択)して新しいpandas.DataFrameを取得する。 文字列要素を持つ列に対して抽出した条件に応じた真偽値boolリストを使うことで望む行を抽出できる。
完全一致
「 == 」を使う。 要素が指定した文字列と完全一致すると「True」となるpandas.seriesを取得する。
print(df['name'] == 'tanaka') # 0 True # 1 False # 2 Flase # Name: name, dtype: bool
部分一致
- str.contains(): 特定文字列を含む
- str.endwsith(): 特定文字列で終わる
- str.startwith(): 特定文字列で始まる
- str.match(): 正規表現パターンに一致
# str.contains(): 特定文字列を含む ## 引数na : 欠損値だとNaNで返却される結果を置き換える値にすることができる。 ## 引数case : 大文字小文字は区別して処理されるがFalseで指定すると区別されなくなる。 ## 引数regex : 第一引数に指定した文字列はデフォルトで正規表現パターンとして処理されるがFalse指定することで特殊文字そのものが含まれているかを処理する。 print(df['name'].str.contains('sa', na=True, case=False, regex=False)) => 結果 0 True 1 False 2 True 3 Nan => True Name: name, dtype: bool # str.endwsith(): 特定文字列で終わる ## 要素が特定文字列で終わるとTrueでpandas.Seriesとなる。 ### 引数na, caseのみ ### 第一引数文字列がそのまま判定に使われる print(df['name'].str.endswith('e')) => 結果 0 True 1 False 2 True Name: name, dtype: bool # str.startwith(): 特定文字列で始まる ## 要素が特定文字列で始めるとTrueでpandas.Seriesとなる。 ### 引数na ### 第一引数文字列がそのまま判定に使われる print(df['name'].str.startswith('B')) => 結果 0 True 1 True 2 False Name: name, dtype: bool # str.match(): 正規表現パターンに一致 ## 要素が正規表現パターンが一致するとTrueでpandas.Seriesとなる。 ### 文字列先頭がパターンマッチするか判定をする。 ### 先頭がマッチしないとFalseとなる。 print(df['name'].str.match('.*i.*e')) => 結果 0 True 1 False 2 True Name: name, dtype: bool
重複データ処理
抽出: duplicated()
削除: drop_duplicates()
dtype
サポートされている種類は次の通り。 下記以外だとエラーが発生する。
# 'b' boolean # 'i' (signed) integer # 'u' unsigned integer # 'f' floating-point # 'c' complex-floating point # 'O' (Python) objects # 'S', 'a' (byte-)string # 'U' Unicode # 'V' raw data (void) # DataFrameに対して使う。 df[test].dtype => dtype('O')
参考サイト
機械学習について
Machine Learning(ML) - 技術トレンド調査サイト
機械学習が活用されるもの
- 迷惑メールフィルタ
- 商品の推薦レコメンドシステム
- 株価の予測
- クレジットカードなどの悪用検知
- 音声アシスタント
- チェットボット
- スマートホーム端末
- 自動運転など
学習手法
教師あり学習
入力データとデータが何かと分かるラベル(教師データ)を用意して学習させる。
学習の初めは精度(解答)が低いが学習に時間をかけると段々と精度が向上していく。
教師なし学習
教師データを用意せずに入力データのみで学習をさせる。
精度は入力データ間の距離や類似度、統計的な性質にもとづいてクラスタリングして求める。
半教師あり学習
教師データがある入力データとないデータを使って学習させる。
強化学習
定めた評価基準によって報酬を与えて、報酬が増えるにはどうすべきかを学習していく。
教師ありと教師なし学習の特徴を併せ持った中間的な学習手法である。
アルゴリズムの分類
分類
- Classification
回帰
- Regression
クラスタリング
- Clustering
次元削減
- Dimensionality Reduction
参考サイト
オープンソフトウェアシステムについて
オープンソフトウェアシステムとは
Open Source Software(以下、OSS)は無償ソフトウェアである。
しかし、利用条件や規約は存在している。
OSSと認定されるには非営利団体である「The Open Source Initiative (以下、OSI)」に承認される必要がある。
オープンソースイニシアティブとは
OSIはOSSの管理をしている。
そのため、OSIは申請されたソフトウェアのライセンス(使用条件)が「オープンソースの定義( The Open Source Definition)」に準拠しているかを確認する。
OSIから承認されることで公式的にOSSであると証明する「OSI認定マーク」が付与される。
オープンソースの定義
10項目の定義が定められている。
No | オープンソースの定義 |
---|---|
1 | 自由な再頒布ができること |
2 | ソースコードを無償で入手できること |
3 | 派生物へも同じライセンスを適応できること |
4 | 差分情報の配布を認める場合、同一性の保持を要求してもよい |
5 | 個人やグループを差別しないこと |
6 | 利用する分野を差別しないこと |
7 | 再配布において追加ライセンスを必要としないこと |
8 | 特定製品に依存しないこと |
9 | 同じ媒体で配布される他のソフトウェアを制限しないこと |
10 | 技術的な中立を保っていること |
オープンソースライセンスについて
オープンソースライセンスとは
Open Source Licence(以下、OSL)は一定条件下でソフトウェアの使用、複製、改変(複製物または二次的著作物の)再頒布が可能である。
条件
条件 | 適用範囲 | 定義 | 背景 |
---|---|---|---|
無保証であること | ほぼ共通 | 予期した動作をする/しないの保証をしない。動作の結果により何らかの損害をもたらしても保証しない。 | オープンソースである以上、ソフトウェアなどの著作物は制御しきれない形で流通する可能性が高いためもとの著作者の利益還元は難しい。そのため「有用ではあるとは思うが無保証である」と謳っている。 |
著作権表示を保持すること | ほぼ共通 | オープンソースは一定条件内での自由利用を認めることであり著作権を放棄することではない。 | 適切な形でソースコードや付属文書に含まれる著作権表示を保持し、 二次的著作物を作成した者が自分で0から作成したかのように偽ってはいけない。 |
同一ライセンスの適用 | 著作物による | 複製や改変物を頒布する際には必ず元と同じライセンスでの利用を認めるようにしなければならない。 | GPLが代表的でソースコードを利用して独占するソフトウェアを作成することは難しい。 |
原著作者の特別な権利 | 著作物による | ソースコードを独占的に所有している企業がオープンソース化するに当たって考慮する余地があるものである。 | 二次的著作物は頒布をする際にソースコードを公開する必要があるライセンスを使って作成されたが元々著作権を有していた場合特別に公開しなくても良い権利を持っている。 |