新たに学習したことと思ったことをつらつらと

とある大学院生が生きてて学んだことや考えたしょうもないことを書くブログ

徹底解説Visual Studio Codeを読んで

Visual Studio Codeの解説本を読みました

scikit-learnを用いた機械学習はまた次回
今回はvisual studio code

読んだ本はこれ

徹底解説Visual Studio Code

徹底解説Visual Studio Code

  • 作者:本間咲来
  • 発売日: 2019/09/27
  • メディア: 単行本

地元の図書館にあったので借りました。
エディタに関することを一度くらいきちんと学ぼうと思います。

ほんとはこれもあってこれの方が新しいので借りたかったけど借りれられてたのでまた今度借りて読もうと思います。
[asin:B084SS63L4:det

基本的なショートカット

  • サイドバー表示切り替え [command]+ [b]
  • エディタ分割 [control]+[option]+[command]+[\]
  • エディタの移動 [command]+[option]+[→] か [←]
  • クイックオープン現在のワークスペース内のファイルを開いたり最近開いたファイルを開ける [command]+[p]+[?]
  • 任意の行移動 [control]+[g]かクイックオープンに対して[:]の後に行番号移動
  • ファイル内の任意のシンボルへ移動[command]+[shift]+[o]かクイックオープンで[@]を入力
  • ワークスペース内の任意のシンボルへ移動[command]+[t]かクイックオープンで[#]を入力
  • エディタブループ内のファイルへ移動 [control]+[tab]
  • カーソルのしたに行を追加して移動する [command]+[Enter]
  • 上に行くには[command]+[shift]+[Enter]
  • ファイルの先頭や末尾 [command] + [↑]/[↓]
  • 同じ文字列の選択 任意の文字列を選択して [command]+[shift]+[L]
  • マークダウンのプレビューを開く [comamnd]+[k]+[v]
  • タブを閉じる [command]+[w]
  • 行のインデント [command]+[ ] ]
  • 行のアウトデント [command]+[ [ ]

html/js/cssを書く

vscodeにはhtmlやcssを少ない入力でコーディングする機能としてEmmetがある

[!]を入力し[Tab]を押すと以下のような雛形が生成される

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>

他にもEmmetの構文があるらしい
詳しくは公式サイト https://docs.emmet.io みるとよさそう

[alt]+[shift]+[F]でオートフォーマットされる

Live Serverでhtmlのリアルタイムレビューができる。

node.jsの話とかgitとの連携とか読んだら書きたいと思う。

それより先にscikit-learnの話書かなきゃ

機械学習入門

機械学習入門

機械学習人工知能とは

ここ数年AI(Artifical Inteligence)という言葉が様々な箇所で現れるようになってきたが、そもそもAI/人工知能とはなんなのか
また、機械学習人工知能は同じなのであろうか
人工知能という言葉を初めて使用したジョン・マッカーシーによると人工知能は以下の意味らしい
また、機械学習の定義として有名なのが計算機科学者 アーサー・サミュエルによるものらしい

  • 人工知能:“知的な機械、特に、知的なコンピュータプログラムを作るための科学技術”
  • 機械学習:"コンピュータに明示的にプログラムすることなく学習する能力を与える研究分野"

機械学習人工知能の部分集合という理解でいいらしい
人工知能において機械学習以外にもルールベースがある

  • ルールベース:人間が記述したルールをもとに判断するAI

機械学習とは

ひと口に機械学習といっても分類がある
基本的には3つ

  1. 教師あり学習:入力、出力データから予測モデルを開発する
  2. 教師なし学習:入力データのみからデータをグループ化する
  3. 強化学習:試行錯誤を通じて「価値を最大化するような行動」を学習する

教師あり学習はさらにクラス分類問題と回帰問題にさらに分かれ、教師なし学習クラスタリングや次元圧縮などに分かれていく

Pythonによる機械学習

機械学習を行う際にはよくPythonが用いられる
機械学習に用いらるライブラリは以下のものがある

  • Numpy:配列の数値計算を行うライブラリ
  • Pandas:表形式のテーブルデータを扱うライブラリ
  • Matplotlib:グラフ描写や統計量の可視化などを行うライブラリ
  • scikit-learn:機械学習モデルを構築・評価するライブラリ

他にも画像を扱うためにライブラリであるPillowやテキストデータを扱うライブラリのMecabJanomeなどがある

Numpy

公式ドキュメント

Numpyは配列データを高速に操作・計算することが得意なライブラリ
配列とは情報を記憶するための箱が複数が連なっているもの

基本的な操作
  • 1次元配列を生成
array1 = np.array([0,1,2])
  • 連番整数の1次元配列を生成 , ()内は要素の個数
array2 = np.arange(24)
  • reshape()を用いて配列の構造を変更
#1次元配列を2次元に整形
array3 = array2.reshape(4,6)
  • 配列の連結(行方向)
np.concatenate([array1,array2],axis=0)
  • 配列の連結(列方向)
np.concatenate([array1,array2],axis=1)
  • 配列の分割
np.split(array,3)
array.sum() #合計値
array.mean() #平均値
array.min() #最小値
array.max() #最大値

とりあえずこんな感じ

Pandas

公式ドキュメント

pandasはテーブルデータの操作が得意なライブラリで集計、統計処理などの分析業務で頻出のデータ処理が簡単にできる
また機械学習モデルの設計においてデータの前処理、特徴量設計に用いられる

numpyで高速処理をするためにpandasで処理できる形に整形する

基本的な操作
  • csvの読み込み
df = pd.read_csv('data.csv', sep=',')
  • データの最初の数行を確認,()内に数字を入ればその行数表示できる
df.head() #()内が空欄だと5行
  • データの最後の数行を確認
df.tail()
  • 列を追加
df['列名']=[データ(カンマ区切り)]
  • 列の削除
del df['列名']
  • データを細かく表示
df.iloc[1:4] #2行目から4行目の前まで
  • 一意の項目を取得する
df['列名'].unique()
  • 欠損値を調べる
# 欠損値を含むか
df.isnull().any()

# 欠損値をどのくらい含むか
df.isnull().sum()
  • 欠損を含む行を抽出
df[df.isnull().any(axis=1)].head()
  • 欠損地を置き換える
df.fillna(置き換える値)
  • データの結合
結合df = 主df .join (従df ,on条件)

Matplotlib

公式ドキュメント

データの可視化によく用いられるライブラリ
matplotlibがパッケージ全体
pyplotはそのモジュール、スクリプトで作図するときに使う
pylabのimportは推奨されてない模様、インタラクティブな作図にはこっちを使うらしい(よくわからん)

  • グラフを書く
plt.plot()
  • 散布図
df.plot.scatter()


scikit-learnを用いて実際に機械学習するのはまた次回

Julia始めました vol.2

Juliaでデータ分析する

データ分析で有名なirisデータを読み込む

PythonのScikitLearnからirisを読み込むときと同様にJuliaでもScikitLearnから読み込むことができる

RDatasetsから読み込むことでdf形式で読み込むこむことができる

using RDatasets
using RCall
using Gadfly

RDatasetsの中身を確認する

RDatasets.packages()
f:id:oneroom-0302:20200811192857p:plain
RDatasets.packages()

irisデータを読み込む

iris = dataset("datasets", "iris")

データの要約を確認

describe(iris)
f:id:oneroom-0302:20200811193254p:plain
describe

データの中身を確認するためにhead(df)が用いられるが、Juliaではhead(df)からfirst(df, 6)に置き換わったらしい

julia> first(iris, 6)
6×5 DataFrame
│ Row │ SepalLength │ SepalWidth │ PetalLength │ PetalWidth │ Species      │
│     │ Float64     │ Float64    │ Float64     │ Float64    │ Categorical… │
├─────┼─────────────┼────────────┼─────────────┼────────────┼──────────────┤
│ 1   │ 5.1         │ 3.5        │ 1.4         │ 0.2        │ setosa       │
│ 2   │ 4.9         │ 3.0        │ 1.4         │ 0.2        │ setosa       │
│ 3   │ 4.7         │ 3.2        │ 1.3         │ 0.2        │ setosa       │
│ 4   │ 4.6         │ 3.1        │ 1.5         │ 0.2        │ setosa       │
│ 5   │ 5.0         │ 3.6        │ 1.4         │ 0.2        │ setosa       │
│ 6   │ 5.4         │ 3.9        │ 1.7         │ 0.4        │ setosa       │

次にプロットする

plot(iris, x = "SepalWidth", y = "SepalLength", color="Species")
f:id:oneroom-0302:20200811195007p:plain
plot

重回帰分析をする

using GLM
lm1 = lm(@formula(PetalWidth ~ PetalLength) , iris)
pre = predict(lm1)

次はクラスタリングとかPCAとかしたい
余裕があれば教師あり学習とか

Julia始めました vol.1

Juliaとは

JuliaはMITで開発された言語で2009年に誕生し2012年に公表された。 開発者はブログでこんなことを言っている

我々は、オープンソースでリベラルなライセンスの言語がほしい。C言語の速度と、Rubyのダイナミズムがほしい。同図像性があり、LISPのような真のマクロを備えつつ、Matlabのように分かりやすくなじみのある数学的記法を使える言語がほしい。汎用的なプログラミングはPython並みに便利で、統計の扱いはR言語並みに容易で、文字列処理はPerl並みに自然で、線形代数はMatlab並みに強力で、プログラムの連結はシェル並みに得意な言語がほしい。習得が超簡単でありながら、筋金入りのハッカーが喜んで使い続ける言語がほしい。インタラクティブでありつつ、コンパイル方式の言語がほしい

いろんな言語のいいとこ取りの言語らしい

Juliaのインストール

公式サイトからインストール

実行環境

【PC】 macOS Catalina ver 10.15.6

【Julia】 ver 1.31

動かすまで

vscodeで動かす

  1. vscode拡張機能「julia」をinstallする

    f:id:oneroom-0302:20200809151616p:plain
    Juliaの拡張機能

  2. pathを通す

「code」→「基本設定」→「拡張機能

f:id:oneroom-0302:20200809152300p:plain
pathを通す

拡張機能」→「Julia」を選ぶ

f:id:oneroom-0302:20200809152520p:plain
Executable Path

Executable Pathにpathを通す。

今回のJuliaのversionが1.3なので1.3としている

  1. テスト

適当に.jiファイルを作って「Shift + Enter」で実行

f:id:oneroom-0302:20200809152811p:plain
test

Jupyter notebookで動かす

  1. インストールしたJuliaを起動する

  2. IJuliaをインストールする

julia> using Pkg
julia> Pkg.build("IJulia")
using IJulia; notebook(detached=true)

念のためJupyter notebookを立ち上げて確認する

基本的な演算

julia> 1 + 2 #加法
3

julia> 5 - 3 #減法
2

julia> 3 * 5 #乗法
15

julia> 7 / 5 #除法
1.4

julia> 7 % 5 #余り
2

julia> 3 ^ 2 #冪乗
9

とりあえずHello World

julia> println("Hello World!")
Hello World!

変数

Juliaにおける変数は値に紐づく名前になる

例えば以下の通り

julia> x = 10
10

julia> x + 1
11

julia> x = 1 + 1
2

julia> x = 'Hello World!!'
ERROR: syntax: invalid character literal
Stacktrace:
 [1] top-level scope at REPL[11]:1

julia> x = "Hello World!!"
"Hello World!!"

文字列を変数に渡す際にはダブルクォーテーションでなければならない

シングルクォーテーションとダブルクォーテーションは区別される?

詳しいことは後で調べる

変数名は大文字と小文字が区別される

julia> x = 1.0
1.0

julia> X = 2.0
2.0

julia> x + X
3.0

julia> phrase = "Hello World!!"
"Hello World!!"

Juliaには変数名に以下の制限を設けているが、以下の表記法を使用するのに便利になっている

  • 変数名を小文字で表記
  • 単語の区切りはアンダースコア( '_' )で表すことができるが、変数名が読みにくい場合の除き使用は推奨されていない
  • 型と モジュール名は大文字で始まり、単語の区切りはアンダースコアの代わりにキャメルケースで表記される
  • 関数や マクロの名前はアンダースコアを含まない小文字で表記
  • 引数に書き込む関数名は ! で終わる. これらの関数は、関数が呼び出された際に戻り値を返すだけでなく引数に変更を加えるため、「変異」または「in-place」と呼ばれる

とりあえず今日はこのくらい

はじめまして

はじめてのブログ

このブログは普段何も考えずに生きている大学院生が, 何気なく学んだことを備忘録代わりに書いたり, 考えたしょーもないことをアウトプットの練習がてらつらつらと書くだけのブログです.

自己紹介的なもの

  • とある大学院に通う修士1年
  • 統計学の研究室に所属しており、研究テーマはファジィデータ解析
  • 数学は好きだが大学に進学してからは嫌いになりそうに多々なった
  • バイトで塾講師をしている
  • back numberが好き
  • ラーメンが好きでよく都内までラーメンを食べにいきます
  • 本読むのが割と好き

雑ですがこんな感じの中身の人がつらつらと書いていきます

やろうと思ったわけ

とりあえずは自分が普段ふと思ったことや考えたことをアウトプットする機会がないのでその機会をつくるためです

元々友達が少ないから会話することがないがここ最近のご時世的にさらに会話がすくなくなってきました(書いていて悲しくなりますが)

また、塾講師のバイトに加えてIT企業みたいな内容のバイトをしていて、そこで学んだことをアウトプットする機会が欲しかったってのもあります。

Qiitaでよくねって思ったのですがそうすると投稿できるジャンルが絞られちゃうのでやめました

書く内容とルールとか

書く内容は特にこれってのはありませんが多分以下のこと書くと思う - PythonとかJuliaとかのプログラミング言語で学んだことの備忘録 - 論文や書籍を読んだ時の中身と学んだこと - フツーに本読んで思ったこと - 生活してて考えたことやニュースとか見て考えたこと

投稿頻度とかのルールは特にありません

思ったことを好きな時に好きなだけ書いていこうと思います

とりあえずまずは1ヶ月続けることから頑張ろう

ゆるくいきます