機械学習:Scikit-Learn ボストンデータを良く眺めてみる。ついでにKNNの回帰をやる。

Keita_Nakamoriです。

今回は、ボストンの住宅のデータを眺めて行こうと思います。

ついでにKNNの回帰を試していこうと思います。(前回はKNNの分類でした)

モジュール

ボストンデータをロード

どういうことに使えるでしょうか?

  1. このデータから回帰を行う(学習する)
  2. 以降、”特徴量を持つ新規データ”が入ってきたら、その住宅の価格を予測する。理論価格と呼ぶ
  3. 理論価格より、新規データの価格が10%安ければ買いの判断をする

どんな機械学習アルゴリズムが良いでしょうか

多次元の回帰系ですから、KNN-Regressorをやってみましょう。 だめだったら他のやつを探してみます。

  • data とtargetの形を確認しましょう
  • 訓練用データと検証用データに分割しましょう

特徴量について featrue_namesを確認しましょう

英語を日本語へ翻訳する方法

前述のようなドキュメントを調べるとき、対象とする分野、業界の用語が列挙されると、そこそこ英語ができても単語の意味がわかりません。

そんなときは逆にチャンスで、ドキュメントをまるごと、google翻訳にかけると、専門用語を英語と日本語で一気に覚えることができます。

私は常に躊躇することなくgoogle翻訳します。

念の為

#アンパックの順番を良く間違うので念の為確認

#データフレーム化してデータを眺めてみる

スキャッターマトリクスを眺めてみる

今回もデカイです。

訓練開始

一瞬過ぎて何事も起こってないようですが、ちゃんと計算できています

予測

スクリーニングしてみる

20%以上安い物件の数

22件あるんですね。

この22件について、実際に不動産の知識を持って調査すると良いのではないでしょうか。

課題:精度の算出 と 可視化

精度を検証しようとknn.score(X_test,y_test)したところ、0.4616380924610112 と出ましたが、これは一体なんでしょうw

分類と違って、回帰ですから、%ってわけでもないですし・・・ あとで、もう少し考えてみましょう。今は保留。

また、可視化については、回帰ですから、回帰直線みたいなのを引きたいのですが、このような高次元に対しての回帰直線はどのように書いたら良いのでしょうか。今後の課題といたします。

以上、でした。

機械学習:Scikit-learn ブレストキャンサーデータを良く眺めてみる。ついでにKNNをやる。

こんにちはKeita_Nakamoriです。

今日はブレストキャンサーデータを良く眺めてみようと思います。

データをロードしてキーを確認しましょう。

 

キーを指定してデータの内容を確認しましょう

 

おまけ

np.bincount()を使うと 順番に[0の数 , 1の数 , 2の数,・・・]というようなベクトルが得られる

 

勢い余って、KNNをやってしまおう

おわりに

ということで、たったこれだけで、92%の正解率が得られました。

これは、データがしっかり整っているからできることです。

実際に自分自身の課題に対して機械学習を適用しようとすると、データを収集してきれいに整えることにエネルギーを費やすのだと思います。

番外:データフレームとスキャッターマトリクスを眺めてみる

データ数と特徴量が多すぎて、すごいことになっています。

うわ~~~~~ (*´﹃`*)

 

 

機械学習:Scikit-learn アイリスデータでk-最近傍法をやってみる

Keita_Nakamoriです。

前回、アイリスデータの内容を確認しました。

今回は、機械学習で最も単純と思われるk-最近傍法をやっていきます。

  • 必要なモジュールをインポート
  • データをロードして、入力データと出力データを定義

トレインデータ(訓練用)とテストデータ(検証用)に分割する

# データはランダムに振り分けるが,固定し、0という番号を付ける。

X_train のデータをデータフレーム化して、内容を確認する

columns=iris_dataset[“feature_names”] #データフレームの列名を定義
df=pd.DataFrame(X_train,columns=columns)
df[:5]

X_train のデータフレームをpd.plotting.scatter_matrix()で可視化して眺める。

 k- 最近傍法分類 をやってみる

モデルの作成とトレーニング

予測する

予測性能の評価

結果:0.9736842105263158

または、

でもいいです。

機械学習:Scikit-learn アイリスデータを良く見る

Keita_Nakamoriです。

今日はsklearnのアイリスデータを良く見てみようと思います。

インストール

>pip install sklearn

して

Requirement already satisfied: sklearn in c:\users\omoiy\anaconda3\lib\site-packages (0.0)
Requirement already satisfied: scikit-learn in c:\users\omoiy\anaconda3\lib\site-packages (from sklearn) (0.19.1)

と出るので、すでに入っていました。アナコンダですから。

インポートそしてインスタンス作成

アイリスデータが入っている、ロードアイリスをsklearn.datastetsからインポートします。
from sklearn.datasets import load_iris

関数としてロードアイリスのインスタンス、アイリスデータセットを作成します。

iris_dataset=load_iris #ロードアイリス関数

では、アイリスデータセットを見てみましょう。

iris_dataset()

わけのわからないデータの羅列が出てきますが、よく見るとディクショナリによく似た”Bunchクラス”という形式でデータが入っています。

ディクショナリと同様に、キーとバリューを指定できます。

iris_dataset().keys()

キーを指定してみます。長いので500文字で切りましょう。DESCRはディスクドライブの略です。

まずは、データの概要を見る

iris_dataset[“DESCR”][:500]

または、下のように書くと、見やすくなります。

print(iris_dataset()[“DESCR”][:500]+”\n…”)

データセットの特性

インスタンス数:150 (3クラスあり、それぞれ50個)

アトリビュートの数:

4つの予測用アトリビュート(数値)

  • sepal長さ[cm] sepal 幅 [cm]
  • petal長さ[cm] petal 幅 [cm]

クラス(分類)

  • Iris-Setosa
  • Iris- Versicolour
  • Iris-Virginica

訓練用のインプット”データ”を確認する。

iris_dataset()[“data”]

.shape()で大きさを確認すると(150, 4)。4つの予測用アトリビュートをもった塊が150個ある。

正解である”ターゲット”を確認する

iris_dataset()[“target”]

  • 0=Iris-Setosa
  • 1=Iris- Versicolour
  • 2=Iris-Virginica

なのでしょう、きっと。

ターゲットの名前

iris_dataset()[“target_names”]

ここで出てきました。分類名。前述で予想した通りの順番でした。

特徴の名称を確認する

これも、DESCRでの記述順通りでした。

以上、ロードアイリスのデータでした。

次回は訓練させていきます。

Python:テンポラリーファイルとテンポラリーディレクトリの作成

使用するモジュール :tempfile

import tempfile でインポートできます。

テンポラリーファイルの作成

一時的にテキストなどを保存して、処理が終わったら自動的に消すか残すか選択できます。

テンポラリーディレクトリの作成

こちらも一時的にディレクトリを作成して、処理が終わったら自動的に消すか残すか選択できます。

おわりに

いろんなソフトウェアを使うとテンポラリーファイルが溜まっていくと言われてますが、こういうことなんですね。自動的に消えないようにしたときは、しっかり自分でディレクトリとファイルを消すようにしないといけませんね。

消し方はこちら。ファイル操作

import os

os.remove(path)

os.rmdir(path)

ディレクトにファイルが入っていると消せないので、まるごと消す場合はこちら。

import shutil

shutil.rmtree(path)

Python:ファイル操作 os pathlib glob shutil

ファイル操作を行うためのモジュールは

  • os:ファイル、ディレクトリの作成、削除
  • pathlib:パス指定でファイルを作成(タッチする)
  • glob:ファイル名のリストを出力する
  • shutil:ファイルをコピーする。まるごと削除する

がありますので基本機能を使ってみます。

 

あとは、必要に応じてググりましょう。大事そうなものは追記していきます。

Python:ファイル操作 os

 

Python:csvを操作する

csvファイルを作成する

 

csvファイルを読み込む

 

Python:txtファイルを作成、開く、読み込む、上書き、追記

python script を実行しているときに、何かしらを.txtファイルや.csvファイルとして保存したいデータがあると思います。

.txtファイルを新規作成して、なにかしらを書き込んで保存するところまでやりましょう。

これを再度呼び出して追記します。

今度は、ただ読み込んでみます。

もっといい方法があります with構文

f.close()する必要がありません。

一行づつ読み込むこともできる

while True → f.readline() → if break

2文字ずつ読み込むこともできる f.read(chunk)

文字を調べる f.seek

f.tell() 現在位置を確認する

f.read(1) 現在位置の値を確認する

f.seek(5) とかで現在位置を移動する

f.read(1) 現在位置の値を確認する

この繰り返し作業でいろいろ操作していく

Python:HIOKI8870のcsvデータをpandas.DataFrameに読み込む方法

使用するモジュール群

あとでmatplotlibでグラフを作ったりするので、あらかじめインポートしておきます。

HIOKI8870のcsv生データを読み込む関数

単純には読み込めません。エラー回避のポイントは以下の通り。

  • names (columnの名称)をあらかじめ指定し、列数を固定すること。
  • 日本語が入っているためencodingをshift-jisに指定すること。

 

関数の使い方

関数名:read_hioki(file_addr)

HIOKI8870のcsv生データを読み込み,整形したデータフレームを返す関数です。

引数はfile_addrのみ。読み込むcsvファイル名を絶対パスまたは相対パスで指定するだけです。(文字列で)

file_addr:HOKI8870のcsv生データ

返り値dfは、純粋にロギング条件を除去した、純粋な測定データ部分のみをPandas.DataFrameとした、データフレームです。

おわりに

以上で、データフレームが作成できましたので、あとはnumpyなどで内部処理を行った後に、matplotlibで可視化すると良いです。