最小二乗法で線形近似(python,numpy)

pythonのnumpyで最小二乗法で線形近似し傾き,切片,回帰式を取得したいと思います.

```python

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt

def main():

X = [1,2,3,4,5]
Y = [1.1, 2.1, 2.8, 4.3, 5.1]

A = np.array([X,np.ones(len(X))])
A = A.T
#線形回帰(np.linalg.lstsq)を実行してa:傾き、b:切片を取得。
a,b = np.linalg.lstsq(A,Y)[0]
print("a(傾き):{}".format(a))
print("b(切片):{}".format(b))

#X,Y生データのプロット
plt.plot(X,Y,"ro")
#y=a*X;bの回帰式をプロット
plt.plot(X,(a*X+b),"g--")
plt.grid()
plt.show()


if __name__ == '__main__':
main()

```

 

出力結果

a(傾き):1.02

b(切片):0.02

f:id:kobakenkken:20181130091444p:plain

 

matplotlibでTimes New Romanを使うためのTips

理系の論文で多用される

Times New Roman

ですが(以下参照) www.panoramic-view.info

matplotlibで使うための方法をまとめておきます.

plt.rcParams['font.family'] = 'Times New Roman'

以上です.

もし,ubuntu等で findfont: Font family ['Times New Roman'] not found. Falling back to DejaVu Sans で使用できない場合は

$ sudo apt install msttcorefonts -qq
$ rm ~/.cache/matplotlib -rf

で動くと思います.

Google ColabでKaggle! 【STEP2:データ前処理とか】

前提

まず前提として言語はpythonでpandasを使用しています.

データのダウンロード

これは参加するコンペのdatasetダウンロードするだけです.

#ダウンロード可能なコンペ一覧
!kaggle competitions list
#ダウンロード
!kaggle competitions download -c titanic

データの把握

どんなデータなのかを把握することがまず第一歩です.

import pandas as pd
import numpy as np
 
train = pd.read_csv("train.csv")
test = pd.read_csv("test.csv")

print(train.head())

f:id:kobakenkken:20181117153451p:plain

次に欠損値(null)が何個あるのか,どの項目にあるのか見てみます.

## 値がnullの項目数を数える
train.isnull().sum()
###############
PassengerId      0
Survived         0
Pclass           0
Name             0
Sex              0
Age            177
SibSp            0
Parch            0
Ticket           0
Fare             0
Cabin          687
Embarked         2
dtype: int64
################

以上からデータセット内の全体を把握します.

次回は下記の内容です

データの前処理(必要な場合)

提供されているデータを取り扱うために前処理を行う必要があります。 前処理は沢山種類がありますがここでは2種類を紹介しておきます。

欠損データの補完

この欠損値をどう処理することがベターなのかを議論することはとても重要ですが簡単な方法だけとりあえずまとめます.

Ageの補完

今回のAgeはmean(平均値)とmedian(中央値)とmode(最頻値)の3つの例を示します.

#case of mean
train["Age"] = train["Age"].fillna(train["Age"].mean())
#case of median
train["Age"] = train["Age"].fillna(train["Age"].median())
#case of mode
train["Age"] = train["Age"].fillna(train["Age"].mode())

文字列データを数値データ形式へ変換

#

複数GPU所持しているPCでKeras内に使用GPUの指定方法

使用方法

import tensorflow as tf
from keras.backend.tensorflow_backend import set_session
config = tf.ConfigProto(
    gpu_options=tf.GPUOptions(
        visible_device_list="2", # specify GPU number
        allow_growth=True
    )
)
set_session(tf.Session(config=config))

(https://github.com/fchollet/keras/issues/1538)

基本的にはバックエンドとして動作するTensorflowの設定を変更します.keras.backend.tensorflow_backend.set_sessionを用います. 注意点としては,コードの内部でtf.Sessionを取得しているようなケースでは,先頭に上記を記述しても意味がありません(とくに自分で書いていないコードを走らせる場合).

参考

qiita.com

pythonでの複素数の取り扱いと極座標変換し極座標グラフへプロットしてみた

pythonでの複素数の取り扱い

研究の中でpython複素数を使うことが多々あるためまとめておきます. pythonでは複素数は簡単に取り扱うことが可能である.

虚数単位をjで表す.(Not i)

c = 2 + 5j

以上です

複素数極座標変換

cmath.polar()を使うと(絶対値, 偏角)のタプルでまとめて取得が可能です.

c = 2 + 1j

print(cmath.polar(c))

極座標変換したものを極座標グラフへ

import numpy as np
import matplotlib.pyplot as plt
import cmath

c =11618.669889921717+7.8985760292917565e-19j

print(cmath.polar(c))
plt.polar(cmath.polar(c)) # 極座標グラフのプロット

plt.show()

f:id:kobakenkken:20181103232527p:plain

参考

(62) 直交座標 to 極座標変換 – Pythonやってみる!

note.nkmk.me

Google ColabでKaggle! 【STEP1: Kaggle APIの設定とか】

Google Colabを起動

自分のGoogleアカウントからGoogle Colabを起動して開いて下さい

Google Drive>新規>その他>Colaboratory

kaggle APIのインストール

!pip install kaggle

Kaggle API Keyをダウンロードする

Kaggleを開いて自分のアカウントページを開く

アドレスのサンプル https://www.kaggle.com//account

Create New API Token をクリック kaggle.json をダウンロード

Google Colabへkaggle.jsonをアップロード

from google.colab import files
files.upload()

アップロード完了後、kaggle.jsonを移動する

!mkdir -p ~/.kaggle
!cp kaggle.json ~/.kaggle/

参考

https://stackoverflow.com/questions/49310470/using-kaggle-datasets-into-google-colab

https://colab.research.google.com/drive/1DofKEdQYaXmDWBzuResXWWvxhLgDeVyl?pli=1&authuser=2

以上 次回は実際の推測や提出までです

How to use numpy.squeeze() squeeze()の使い方

squeeze()は,配列の中に次元数1があるならばその次元を削除する. 例えば (28, 28, 1)の場合は(28, 28)となる.

画像処理で(28, 28, 1)のチャネル部分を削減してnumpy.imshow() などの関数を使って,グレースケール画像を表示しようした際に便利