お知らせ:当該webサイトをSSL化しました

こんばんは Kazu_Manabuです。

当該webサイトをSSL化しました。URLの頭がhttpsになっております。

やり方です。

エックスサーバーを使っているのですが、

まず、エックスサーバーにログイン

インフォパネル内の「サーバー管理」

任意のドメイン名の「選択する」を押す

SSL用アドレスに「https://www.toyo-interest.com/」が追加されます。httpsにちゃんとなっています。

1分位すると反映されます。

次に、wordpressにログイン

ダッシュボードの設定>URLのhttp://~~~をhttps://~~~に書き換えます。というかsを挿入します。

そして、私の場合は20分くらい放置してやっと繋がるようになりました。

かなりドキドキしました。

二度とつながらないんじゃないかとか、ハラハラしました。

実はわたくし、

ろくに調べず一番最初にwordpressの設定でhttpをhttpsにいじってしまい、繋がらなくなってしまいました。ログインできないのでダッシュボードに入ることができず、元通りにすることができないという事態に陥りました。

調べていくと、エックスサーバーのインフォパネル内の「サーバー管理」でSSL化しなさいと書いてあったのでやってみたら、うまくいきました。

本当に良かったです。(*´﹃`*)

 

 

 

機械学習: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での記述順通りでした。

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

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

Math:固有値・固有ベクトル

英語でいうと アイゲンバリューとアイゲンベクターというそうです。

(Eigen Value , Eigen Vector)

メモっておきます。

ステップ0 定義

  • A:行列
  • X:ベクトル
  • λ:スカラー

があったら

AX=λX

と表されるとき、右辺のλとXは

  • λ:固有値
  • X : 固有ベクトル

と呼ばれます。

言わなくてもわかると思いますが、X=ゼロベクトル というのは無しですよ!

ステップ1 変換

線形変換の復習です

左辺

  • A=[[2,3],[2,1]]
  • X=[1,3]

のとき、計算すると

  • AX=[2*1+3*3 , 2*1+1*3]=[11,5]

これは、ベクトルX[1,3]が行列Aによってベクトル[11,5]へ変換されたことを意味します。

ステップ2 ” 固有 ” とは

ベクトルXだけを変えてみましょう

  • X=[3,2]

すると、左辺は、

  • AX=[2*3+3*2 , 2*3+1*2]=[12,8]
  • さらに変形して,AX=4[3,2]

ということで、AX=λXの形と見比べると、左辺と右辺のベクトルXは[3,2]で同一の値になっていて、さらにスカラーλは4という値になりなっています。

このとき,

  • λ:固有値
  • X : 固有ベクトル

という呼び方をされます。

結果として、ベクトルXに行列Aをかけ合わせたんだけど、結果としてベクトルの向きは[3,2]のまま変わらないで大きさだけ4倍になった。

固有というのは「向きが保存される特殊な状況」ということです。

ステップ3 どんなとき使うの?

現時点iのときにα[i],β[i]という値をとる事象を考えます。

次の時点[i+1]のときは、それがα[i+1],β[i+1]に変化するとしましょう。

それぞれの数式は漸化式の如く下記のように表現できるものとしましょう。

  • α[i+1] =   0.5     α[i] + 0.4  β[i]
  • β[i+1] =-0.104 α[i] + 1.1   β[i]

そうすると、これはAX=λXのように表現できます。

  • [[0.5,0.4],[-0.104,1.1]]  [α[i],β[i]] = λ [α[i],β[i]]

ステップ4 固有値、固有ベクトルを求める

固有方程式を使うと固有ベクトルλを求めることができます。

  • 固有方程式:det(A-λE)=0

AX=λX を移行して

AX-λX=0 を行列Xでくくって

(A-λE)X=0  ※単位行列Eを忘れないで

ここでXはゼロベクトルではない。

ここで左辺の行列(A-λE)が逆行列を持っていたら、

(A-λE)^-1 (A-λE)X = (A-λE)^-1 ・0

EX=ゼロベクトル

Eは単位行列なので、Xがゼロベクトルでなくては、この式は満たされない。

でも、今は、固有値、固有ベクトルを有するためにはXがゼロベクトルであってはだめなので、そもそも、「(A-λE)に逆行列があってはならない」というところまで遡る。

行列(A-λE)が逆行列を持たない条件

det(A-λE)=0

結果

λ=1.02 , 0.58 と2つ解(固有値)が出てきますので、それぞれ

  • λ1=1.02
  • λ2=0.58

としましょう。

固有ベクトルは、いまさっき求めた固有値を使って

  • (A-λ1E)X=0 より固有ベクトル v1=[10,13]
  • (A-λ2E)X=0 より固有ベクトル v2=[5,1]

と算出できます。

ステップ5 AX=λXの意味

  • 固有ベクトル v1=[10,13] のとき

AX=λXは

  • [[0.5,0.4],[-0.104,1.1]] [10,13] = 1.02  [10,13]

この意味するところは、[α[i],β[i]]=[10,13] という組み合わせのときには、

そのベクトル[10,13] を変化されることなく、ステップごとに1.02倍されていく ということです。

同様に、固有値 λ2 = 0.58 のとき

  • 固有ベクトル v2=[5,1]
  • [[0.5,0.4],[-0.104,1.1]]  [5,1] = 0.58 [5,1]

こちらの意味も同様に、そのベクトル[5,1] を変化されることなく、ステップごとに0.58倍されていく ということです。

これで、どういう組み合わせのときに、その組み合わせの割合を変えずに、スケールだけを変化させられるのかがわかるようになりました。

しかし、これでは、2つの固有ベクトルのとき、という限定された情報しかありません。

ステップ6 最終的には・・・

初期ベクトルX[0]を

  • X[0]=C1 V1+C2 V2

と置きます。

ここで V1,V2は固有ベクトル

C1,C2は固有ベクトルにないかしらを掛け算する係数

では、ステップを進めてみましょう。

  • X[1] = AX[0]= C1 A  V1+C2 A  V2

ここで Aをλに入れ替えます。

  • X[1] = C1 λ1 V1+C2 λ2  V2

さらにすすめて

  • X[2] = AX[1]= C1 λ1λ1  V1+C2 λ2λ2  V2
  • X[3] = AX[2]= C1 λ1λ1λ1  V1+C2 λ2λ2λ2  V2

λが増えていくだけです。

  • X[i] = C1 (λ1^i) V1+C2 (λ2^i)  V2
  • X[∞] = C1 (λ1^∞) V1+C2 (λ2^∞)  V2

ここで λ2は1よりも小さいので λ2^∞=0 、 よって

  • X[∞] = C1 (λ1^∞) V1

よって、ステップ数を増やしていくと、最終的には固有ベクトルv1に落ち着くということです。

もう一度整理すると。X[i+1]のときは、

  • X[i+1] = C1 (λ1^(i+1)) V1 =λ C1 (λ1^i) V1 よって
  • X[i+1]=λ1  X[i]

というシンプルな形になります。

VR:オブジェクトを発射する

Keita_Nakamoriです。

前回やった、オブジェクトの召喚(Summon.cs)を発展させて、出現と同時に、別のスクリプト(Shooter.cs)を追加し初速度を与えることにより、砲弾のようにオブジェクトを前方へ発射させてみましょう。

スクリプト Shooter.cs

これはまだ、Summon.csと同じく、オブジェクトを召喚するだけです。

Shooter.csを設置するヒエラルキーの場所

新規にEmptyObjectを追加し、オブジェクトの名前をわかりやすくShooterにします。

置き場所はどこでもいいのですが、オブジェクトを発射するのは自分であるということで、MeMyselfEyeに入れました。またDayDreamコントローラーのAppボタンによって発射するということで、GrvControllerPointerの下に入れました。

インスペクターに Objectをアタッチする

Bullet Object : 砲弾として打ち出すオブジェクト。今回はCubeで作ったボール上のものを設定した。

Mazzle Psition:オブジェクトを出現させる初期位置のオブジェクト。今回は目の前のカーソルを設定した。

Shooter2.cs

では、Shooter.csで召喚したモンスターボールオブジェクトに対して、当該Shooter2.csによりオブジェクトに初速を与えてみます。Shooter2.csはモンスターボールオブジェクトのインスペクターに設置します。

ShooterDestroy.cs

オブジェクトを召喚しすぎると、処理が重くなってしまい、最悪フリーズします。

定期的にオブジェクトを壊す(Destroy)して数を減らさなくてはなりません。

こちらも、モンスターボールオブジェクトのインスペクターの中にいれます。

以上です。