SlideShare a Scribd company logo
機械学習
Tatsunori Ueno
線形回帰モデル
◦ 回帰モデルは、数値を出力するモデルである。
◦ 与えられたデータから関係式を仮定して、データに最も当てはまる係数を求める。
◦ インプットを説明変数、アウトプットを目的変数という。
◦ 最小二乗法を用いて、回帰係数と切片を計算する。
import numpy as np
import matplotlib.pyplot as plt
def reg1dim2(x, y):
n = len(x)
a = ((np.dot(x, y) - y.sum() * x.sum() / n) /
((x**2).sum() - x.sum()**2 / n))
b = (y.sum() - a * x.sum()) / n
return a, b
x = np.array([1, 2, 4, 6, 7])
y = np.array([1, 3, 3, 5, 4])
a, b = reg1dim2(x, y)
plt.scatter(x, y, color="k")
xmax = x.max()
plt.plot([0, xmax], [b, a * xmax + b], color="k")
plt.show()
結果から、出力は入力に対して
直線になるので、複雑なモデルの解析には
向かないことが読み取れる。
非線形回帰モデル
◦ 線形回帰モデルでは、目的変数に対して説明変数は1つだったが、説明変数が1つではなく複数あるモデルを非線形モデルという。
◦ 回帰係数は予想値と目的変数の二乗誤差が最小になるように推定される。
◦ 回帰係数自体を大きくならないようにするモデルに、ラッソ回帰やリッジ回帰がある。
for i in range(len(degrees)):
ax = plt.subplot(1, len(degrees), i + 1)
plt.setp(ax, xticks=(), yticks=())
polynomial_features = PolynomialFeatures(degree=degrees[i],
include_bias=False)
linear_regression = LinearRegression()
pipeline = Pipeline([("polynomial_features", polynomial_features),
("linear_regression", linear_regression)])
pipeline.fit(X[:, np.newaxis], y)
# Evaluate the models using crossvalidation
scores = cross_val_score(pipeline, X[:, np.newaxis], y,
scoring="neg_mean_squared_error", cv=10)
X_test = np.linspace(0, 1, 100)
plt.plot(X_test, pipeline.predict(X_test[:, np.newaxis]), label="Model")
plt.plot(X_test, true_fun(X_test), label="True function")
plt.scatter(X, y, edgecolor='b', s=20, label="Samples")
plt.xlabel("x")
plt.ylabel("y")
plt.xlim((0, 1))
plt.ylim((-2, 2))
plt.legend(loc="best")
plt.title("Degree {}nMSE = {:.2e}(+/- {:.2e})".format(
degrees[i], -scores.mean(), scores.std()))
plt.show()
import numpy as np
import matplotlib.pyplot as plt
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_val_score
def true_fun(X):
return np.cos(1.5 * np.pi * X)
np.random.seed(0)
n_samples = 30
degrees = [5]
X = np.sort(np.random.rand(n_samples))
y = true_fun(X) + np.random.randn(n_samples) * 0.1
plt.figure(figsize=(14, 5))
◦ 線形回帰が直線だったのに対して、非線
形回帰は曲線なのがわかる。
◦ より複雑なモデルに対応することができる。
ロジスティック回帰モデル
◦ ロジスティック回帰モデルは、カテゴリのデータを扱うアルゴリズムである。
◦ ロジスティック回帰関数の目的は、確率を推定することによって、入力変数と出力変数の間の関係性を見つけ出すことである。
◦ データサンプルが、あるカテゴリに属する確率を求める分類するモデルである。
◦ 交差エントロピー誤差関数が最小になるように学習する。
ロジスティック回帰は、分類モデルなので、注意が必要である。
境界線で、出力結果が変わってることがわかる。
コードは次のページ
ロジスティック回帰モデル
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data[:, :2]
y = (iris.target != 0) * 1
plt.figure(figsize=(10, 6))
plt.scatter(X[y == 0][:, 0], X[y == 0][:, 1], color='b', label='0')
plt.scatter(X[y == 1][:, 0], X[y == 1][:, 1], color='r', label='1')
plt.legend();
class LogisticRegression:
def __init__(self, lr=0.01, num_iter=100000, fit_intercept=True,
verbose=False):
self.lr = lr
self.num_iter = num_iter
self.fit_intercept = fit_intercept
self.verbose = verbose
def __add_intercept(self, X):
intercept = np.ones((X.shape[0], 1))
return np.concatenate((intercept, X), axis=1)
def __sigmoid(self, z):
return 1 / (1 + np.exp(-z))
def __loss(self, h, y):
return (-y * np.log(h) - (1 - y) * np.log(1 - h)).mean()
def fit(self, X, y):
if self.fit_intercept:
X = self.__add_intercept(X)
# weights initialization
self.theta = np.zeros(X.shape[1])
for i in range(self.num_iter):
z = np.dot(X, self.theta)
h = self.__sigmoid(z)
gradient = np.dot(X.T, (h - y)) / y.size
self.theta -= self.lr * gradient
z = np.dot(X, self.theta)
h = self.__sigmoid(z)
loss = self.__loss(h, y)
if(self.verbose ==True and i % 10000 == 0):
print(f'loss: {loss} t')
def predict_prob(self, X):
if self.fit_intercept:
X = self.__add_intercept(X)
return self.__sigmoid(np.dot(X, self.theta))
def predict(self, X):
return self.predict_prob(X).round()
model = LogisticRegression(lr=0.1, num_iter=300000)
model.fit(X, y)
preds = model.predict(X)
(preds == y).mean()
plt.figure(figsize=(10, 6))
plt.scatter(X[y == 0][:, 0], X[y == 0][:, 1], color='b',
label='0')
plt.scatter(X[y == 1][:, 0], X[y == 1][:, 1], color='r',
label='1')
plt.legend()
x1_min, x1_max = X[:,0].min(), X[:,0].max(),
x2_min, x2_max = X[:,1].min(), X[:,1].max(),
xx1, xx2 = np.meshgrid(np.linspace(x1_min, x1_max),
np.linspace(x2_min, x2_max))
grid = np.c_[xx1.ravel(), xx2.ravel()]
probs = model.predict_prob(grid).reshape(xx1.shape)
plt.contour(xx1, xx2, probs, [0.5], linewidths=1,
colors='black');
plt.show()
主成分分析
◦ 主成分分析(PCA)とは、元データの持つ情報をできるだけ失わずに変数の数を圧縮することができるため、探索的分析の前処
理や予想モデル構築時の前処理に使われる。
from sklearn.preprocessing import
StandardScaler
import numpy as np
import scipy as sp
# 可視化ライブラリ
import matplotlib.pyplot as plt
# RandomStateオブジェクトを作成
sample = np.random.RandomState(1)
#2つの乱数を生成
X = np.dot(sample.rand(2, 2), sample.randn(2,
200)).T
# 標準化
sc = StandardScaler()
X_std = sc.fit_transform(X)
# 相関係数の算出とグラフ化
print('相関係数
{:.3f}:'.format(sp.stats.pearsonr(X_std[:, 0],
X_std[:, 1])[0]))
plt.scatter(X_std[:, 0], X_std[:, 1])
# インポート
from sklearn.decomposition import PCA
# 主成分分析
pca = PCA(n_components=2)
pca.fit(X_std)
# パラメータ設定
arrowprops=dict(arrowstyle='->',
linewidth=2,
shrinkA=0, shrinkB=0)
# 矢印を描くための関数
def draw_vector(v0, v1):
plt.gca().annotate('', v1, v0,
arrowprops=arrowprops)
# 元のデータをプロット
plt.scatter(X_std[:, 0], X_std[:, 1], alpha=0.2)
# 主成分分析の2軸を矢印で表示する
for length, vector in zip(pca.explained_variance_,
pca.components_):
v = vector * 3 * np.sqrt(length)
draw_vector(pca.mean_, pca.mean_ + v)
plt.axis('equal');
plt.show()
主成分分析のアルゴリズム
1)全データの重心(平均値)を算出
2)重心からデータの分散(ばらつき)が最大となる方
向(第1主成分)を算出
3)第1主成分と直角に交わる(直交)方向で分散が最
大となる箇所(第2主成分)を算出
4)直近の主成分と直交する方向で分散が最大となる箇
所(第3主成分)を算出
5)4)をデータの次元分だけ繰り返す
◦ 第一成分と第二成分を視覚化できた。
アルゴリズム
◦ 教師あり学習のアルゴリズムは下記の種類がある。
◦ 単回帰
◦ 重回帰
◦ ロジスティック回帰
◦ K近傍法
◦ 決定木
◦ サポートベクターマシン
◦ ランダムフォレスト
◦ 勾配ブースティング
◦ 教師なし学習のアルゴリズムは下記の種類がある。
◦ クラスタリング
# k-means法を使うためのインポート
from sklearn.cluster import KMeans
# データ取得のためのインポート
from sklearn.datasets import make_blobs
# サンプルデータ生成
# 注意:make_blobsは2つの値を返すため、一方
は使用しない「 _ 」で受け取る
X, _ = make_blobs(random_state=10)
# グラフを描画
# colorのオプションで色付けができる
plt.scatter(X[:,0],X[:,1],color='black')
# リッジ回帰用のクラス
from sklearn.linear_model import Ridge
from sklearn.model_selection import train_test_split
# 訓練データとテストデータに分割
X = auto.drop('price', axis=1)
y = auto['price']
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.5, random_state=0)
# モデルの構築と評価
linear = LinearRegression()
ridge = Ridge(random_state=0)
for model in [linear, ridge]:
model.fit(X_train,y_train)
print('{}(train):{:.6f}'.format(model.__class__.__name__ ,
model.score(X_train,y_train)))
print('{}(test):{:.6f}'.format(model.__class__.__name__ ,
model.score(X_test,y_test)))
Sklearnのライブラリを使うことで、さまざまな種類のア
ルゴリズムを使用することができることがわかる。
教師あり学習の方がアルゴリズムが多彩である。
サポートベクターマシーン
◦ サポートベクターマシーン(SVM)は、カテゴリを識別する境界線を、マージンが最大となるように引くアルゴリズムである。
◦ 多次元における超平面を訓練し、データの分類を行う。
◦ 線形判別関数と最も近いデータ点との距離をマージンと言う。
# データやモデルを構築するためのライブラリ等のインポート
from sklearn.datasets import load_breast_cancer
# SVMのライブラリ
from sklearn.svm import LinearSVC
# 訓練データとテストデータを分けるライブラリ
from sklearn.model_selection import train_test_split
# データの読み込み
cancer = load_breast_cancer()
# 訓練データとテストデータに分ける
X_train, X_test, y_train, y_test = train_test_split(
cancer.data, cancer.target, stratify = cancer.target, random_state=0)
# クラスの初期化と学習
model = LinearSVC()
model.fit(X_train,y_train)
# 訓練データとテストデータのスコア
print('正解率(train):{:.3f}'.format(model.score(X_train, y_train)))
print('正解率(test):{:.3f}'.format(model.score(X_test, y_test)))
◦ 訓練データの正解率は、93.2%
◦ 検証データの正解率は、92.3%
◦ 同じくらいの正解率となった。

More Related Content

What's hot

PostgreSQL:行数推定を読み解く
PostgreSQL:行数推定を読み解くPostgreSQL:行数推定を読み解く
PostgreSQL:行数推定を読み解く
Hiroya Kabata
 
メタプログラミング C#
メタプログラミング C#メタプログラミング C#
メタプログラミング C#
Fujio Kojima
 
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用Shintaro Fukushima
 
.NET MVP によるドキドキ・ライブコーディング! 小島の分
.NET MVP によるドキドキ・ライブコーディング! 小島の分.NET MVP によるドキドキ・ライブコーディング! 小島の分
.NET MVP によるドキドキ・ライブコーディング! 小島の分
Fujio Kojima
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
Fujio Kojima
 
JPUGしくみ+アプリケーション勉強会(第20回)
JPUGしくみ+アプリケーション勉強会(第20回)JPUGしくみ+アプリケーション勉強会(第20回)
JPUGしくみ+アプリケーション勉強会(第20回)
Yoshinori Nakanishi
 
K010 appstat201201
K010 appstat201201K010 appstat201201
K010 appstat201201t2tarumi
 
CG2013 12
CG2013 12CG2013 12
CG2013 12
shiozawa_h
 
appengine ja night #4 Transaction Puzzlers
appengine ja night #4 Transaction Puzzlersappengine ja night #4 Transaction Puzzlers
appengine ja night #4 Transaction Puzzlers
Suguru ARAKAWA
 
Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)Shintaro Fukushima
 
for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力
imuyaoti
 
Feature Selection with R / in JP
Feature Selection with R / in JPFeature Selection with R / in JP
Feature Selection with R / in JP
Sercan Ahi
 
すごいH 第12章モノイド
すごいH 第12章モノイドすごいH 第12章モノイド
すごいH 第12章モノイドShinta Hatatani
 
機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価Shintaro Fukushima
 
C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~
Fujio Kojima
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competition
yak1ex
 

What's hot (20)

PostgreSQL:行数推定を読み解く
PostgreSQL:行数推定を読み解くPostgreSQL:行数推定を読み解く
PostgreSQL:行数推定を読み解く
 
メタプログラミング C#
メタプログラミング C#メタプログラミング C#
メタプログラミング C#
 
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
 
.NET MVP によるドキドキ・ライブコーディング! 小島の分
.NET MVP によるドキドキ・ライブコーディング! 小島の分.NET MVP によるドキドキ・ライブコーディング! 小島の分
.NET MVP によるドキドキ・ライブコーディング! 小島の分
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
 
JPUGしくみ+アプリケーション勉強会(第20回)
JPUGしくみ+アプリケーション勉強会(第20回)JPUGしくみ+アプリケーション勉強会(第20回)
JPUGしくみ+アプリケーション勉強会(第20回)
 
Juliaで並列計算
Juliaで並列計算Juliaで並列計算
Juliaで並列計算
 
K010 appstat201201
K010 appstat201201K010 appstat201201
K010 appstat201201
 
CG2013 12
CG2013 12CG2013 12
CG2013 12
 
初めてのSTL
初めてのSTL初めてのSTL
初めてのSTL
 
appengine ja night #4 Transaction Puzzlers
appengine ja night #4 Transaction Puzzlersappengine ja night #4 Transaction Puzzlers
appengine ja night #4 Transaction Puzzlers
 
Rの高速化
Rの高速化Rの高速化
Rの高速化
 
Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)Rあんなときこんなとき(tokyo r#12)
Rあんなときこんなとき(tokyo r#12)
 
for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力
 
Feature Selection with R / in JP
Feature Selection with R / in JPFeature Selection with R / in JP
Feature Selection with R / in JP
 
すごいH 第12章モノイド
すごいH 第12章モノイドすごいH 第12章モノイド
すごいH 第12章モノイド
 
機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価機械学習を用いた予測モデル構築・評価
機械学習を用いた予測モデル構築・評価
 
C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competition
 

Similar to 機械学習

Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編
Etsuji Nakai
 
StanとRでベイズ統計モデリング 11章 離散値をとるパラメータ
StanとRでベイズ統計モデリング 11章 離散値をとるパラメータStanとRでベイズ統計モデリング 11章 離散値をとるパラメータ
StanとRでベイズ統計モデリング 11章 離散値をとるパラメータ
Miki Katsuragi
 
RでGISハンズオンセッション
RでGISハンズオンセッションRでGISハンズオンセッション
RでGISハンズオンセッションarctic_tern265
 
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
fukuoka.ex
 
R -> Python
R -> PythonR -> Python
R -> Python
Kazufumi Ohkawa
 
2013.12.26 prml勉強会 線形回帰モデル3.2~3.4
2013.12.26 prml勉強会 線形回帰モデル3.2~3.42013.12.26 prml勉強会 線形回帰モデル3.2~3.4
2013.12.26 prml勉強会 線形回帰モデル3.2~3.4
Takeshi Sakaki
 
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
hirokazutanaka
 
PythonによるDeep Learningの実装
PythonによるDeep Learningの実装PythonによるDeep Learningの実装
PythonによるDeep Learningの実装
Shinya Akiba
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
Seiya Tokui
 
深層学習 Day1レポート
深層学習 Day1レポート深層学習 Day1レポート
深層学習 Day1レポート
taishimotoda
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
Shinichi Kozake
 
「ベイズ推定でパラメータリスクを捉える &優れたサンプラーとしてのMCMC」の実装例rstanコード
「ベイズ推定でパラメータリスクを捉える &優れたサンプラーとしてのMCMC」の実装例rstanコード「ベイズ推定でパラメータリスクを捉える &優れたサンプラーとしてのMCMC」の実装例rstanコード
「ベイズ推定でパラメータリスクを捉える &優れたサンプラーとしてのMCMC」の実装例rstanコード
基晴 出井
 
主成分分析
主成分分析主成分分析
主成分分析
貴之 八木
 
Python standard 2022 Spring
Python standard 2022 SpringPython standard 2022 Spring
Python standard 2022 Spring
anyakichi
 
Introduction to NumPy & SciPy
Introduction to NumPy & SciPyIntroduction to NumPy & SciPy
Introduction to NumPy & SciPy
Shiqiao Du
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit Scala
Kota Mizushima
 
[第2版]Python機械学習プログラミング 第16章
[第2版]Python機械学習プログラミング 第16章[第2版]Python機械学習プログラミング 第16章
[第2版]Python機械学習プログラミング 第16章
Haruki Eguchi
 
KETpic できれいな図を書こう
KETpic できれいな図を書こうKETpic できれいな図を書こう
KETpic できれいな図を書こう
Yoshitomo Akimoto
 
プログラミング言語Scala
プログラミング言語Scalaプログラミング言語Scala
プログラミング言語Scala
TanUkkii
 

Similar to 機械学習 (20)

Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編
 
StanとRでベイズ統計モデリング 11章 離散値をとるパラメータ
StanとRでベイズ統計モデリング 11章 離散値をとるパラメータStanとRでベイズ統計モデリング 11章 離散値をとるパラメータ
StanとRでベイズ統計モデリング 11章 離散値をとるパラメータ
 
RでGISハンズオンセッション
RでGISハンズオンセッションRでGISハンズオンセッション
RでGISハンズオンセッション
 
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
 
R -> Python
R -> PythonR -> Python
R -> Python
 
2013.12.26 prml勉強会 線形回帰モデル3.2~3.4
2013.12.26 prml勉強会 線形回帰モデル3.2~3.42013.12.26 prml勉強会 線形回帰モデル3.2~3.4
2013.12.26 prml勉強会 線形回帰モデル3.2~3.4
 
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
 
PythonによるDeep Learningの実装
PythonによるDeep Learningの実装PythonによるDeep Learningの実装
PythonによるDeep Learningの実装
 
Pythonintro
PythonintroPythonintro
Pythonintro
 
Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と自然言語処理への応用
 
深層学習 Day1レポート
深層学習 Day1レポート深層学習 Day1レポート
深層学習 Day1レポート
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
 
「ベイズ推定でパラメータリスクを捉える &優れたサンプラーとしてのMCMC」の実装例rstanコード
「ベイズ推定でパラメータリスクを捉える &優れたサンプラーとしてのMCMC」の実装例rstanコード「ベイズ推定でパラメータリスクを捉える &優れたサンプラーとしてのMCMC」の実装例rstanコード
「ベイズ推定でパラメータリスクを捉える &優れたサンプラーとしてのMCMC」の実装例rstanコード
 
主成分分析
主成分分析主成分分析
主成分分析
 
Python standard 2022 Spring
Python standard 2022 SpringPython standard 2022 Spring
Python standard 2022 Spring
 
Introduction to NumPy & SciPy
Introduction to NumPy & SciPyIntroduction to NumPy & SciPy
Introduction to NumPy & SciPy
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit Scala
 
[第2版]Python機械学習プログラミング 第16章
[第2版]Python機械学習プログラミング 第16章[第2版]Python機械学習プログラミング 第16章
[第2版]Python機械学習プログラミング 第16章
 
KETpic できれいな図を書こう
KETpic できれいな図を書こうKETpic できれいな図を書こう
KETpic できれいな図を書こう
 
プログラミング言語Scala
プログラミング言語Scalaプログラミング言語Scala
プログラミング言語Scala
 

Recently uploaded

2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
atsushi061452
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 

Recently uploaded (15)

2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 

機械学習

  • 2. 線形回帰モデル ◦ 回帰モデルは、数値を出力するモデルである。 ◦ 与えられたデータから関係式を仮定して、データに最も当てはまる係数を求める。 ◦ インプットを説明変数、アウトプットを目的変数という。 ◦ 最小二乗法を用いて、回帰係数と切片を計算する。 import numpy as np import matplotlib.pyplot as plt def reg1dim2(x, y): n = len(x) a = ((np.dot(x, y) - y.sum() * x.sum() / n) / ((x**2).sum() - x.sum()**2 / n)) b = (y.sum() - a * x.sum()) / n return a, b x = np.array([1, 2, 4, 6, 7]) y = np.array([1, 3, 3, 5, 4]) a, b = reg1dim2(x, y) plt.scatter(x, y, color="k") xmax = x.max() plt.plot([0, xmax], [b, a * xmax + b], color="k") plt.show() 結果から、出力は入力に対して 直線になるので、複雑なモデルの解析には 向かないことが読み取れる。
  • 3. 非線形回帰モデル ◦ 線形回帰モデルでは、目的変数に対して説明変数は1つだったが、説明変数が1つではなく複数あるモデルを非線形モデルという。 ◦ 回帰係数は予想値と目的変数の二乗誤差が最小になるように推定される。 ◦ 回帰係数自体を大きくならないようにするモデルに、ラッソ回帰やリッジ回帰がある。 for i in range(len(degrees)): ax = plt.subplot(1, len(degrees), i + 1) plt.setp(ax, xticks=(), yticks=()) polynomial_features = PolynomialFeatures(degree=degrees[i], include_bias=False) linear_regression = LinearRegression() pipeline = Pipeline([("polynomial_features", polynomial_features), ("linear_regression", linear_regression)]) pipeline.fit(X[:, np.newaxis], y) # Evaluate the models using crossvalidation scores = cross_val_score(pipeline, X[:, np.newaxis], y, scoring="neg_mean_squared_error", cv=10) X_test = np.linspace(0, 1, 100) plt.plot(X_test, pipeline.predict(X_test[:, np.newaxis]), label="Model") plt.plot(X_test, true_fun(X_test), label="True function") plt.scatter(X, y, edgecolor='b', s=20, label="Samples") plt.xlabel("x") plt.ylabel("y") plt.xlim((0, 1)) plt.ylim((-2, 2)) plt.legend(loc="best") plt.title("Degree {}nMSE = {:.2e}(+/- {:.2e})".format( degrees[i], -scores.mean(), scores.std())) plt.show() import numpy as np import matplotlib.pyplot as plt from sklearn.pipeline import Pipeline from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression from sklearn.model_selection import cross_val_score def true_fun(X): return np.cos(1.5 * np.pi * X) np.random.seed(0) n_samples = 30 degrees = [5] X = np.sort(np.random.rand(n_samples)) y = true_fun(X) + np.random.randn(n_samples) * 0.1 plt.figure(figsize=(14, 5)) ◦ 線形回帰が直線だったのに対して、非線 形回帰は曲線なのがわかる。 ◦ より複雑なモデルに対応することができる。
  • 4. ロジスティック回帰モデル ◦ ロジスティック回帰モデルは、カテゴリのデータを扱うアルゴリズムである。 ◦ ロジスティック回帰関数の目的は、確率を推定することによって、入力変数と出力変数の間の関係性を見つけ出すことである。 ◦ データサンプルが、あるカテゴリに属する確率を求める分類するモデルである。 ◦ 交差エントロピー誤差関数が最小になるように学習する。 ロジスティック回帰は、分類モデルなので、注意が必要である。 境界線で、出力結果が変わってることがわかる。 コードは次のページ
  • 5. ロジスティック回帰モデル import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn import datasets iris = datasets.load_iris() X = iris.data[:, :2] y = (iris.target != 0) * 1 plt.figure(figsize=(10, 6)) plt.scatter(X[y == 0][:, 0], X[y == 0][:, 1], color='b', label='0') plt.scatter(X[y == 1][:, 0], X[y == 1][:, 1], color='r', label='1') plt.legend(); class LogisticRegression: def __init__(self, lr=0.01, num_iter=100000, fit_intercept=True, verbose=False): self.lr = lr self.num_iter = num_iter self.fit_intercept = fit_intercept self.verbose = verbose def __add_intercept(self, X): intercept = np.ones((X.shape[0], 1)) return np.concatenate((intercept, X), axis=1) def __sigmoid(self, z): return 1 / (1 + np.exp(-z)) def __loss(self, h, y): return (-y * np.log(h) - (1 - y) * np.log(1 - h)).mean() def fit(self, X, y): if self.fit_intercept: X = self.__add_intercept(X) # weights initialization self.theta = np.zeros(X.shape[1]) for i in range(self.num_iter): z = np.dot(X, self.theta) h = self.__sigmoid(z) gradient = np.dot(X.T, (h - y)) / y.size self.theta -= self.lr * gradient z = np.dot(X, self.theta) h = self.__sigmoid(z) loss = self.__loss(h, y) if(self.verbose ==True and i % 10000 == 0): print(f'loss: {loss} t') def predict_prob(self, X): if self.fit_intercept: X = self.__add_intercept(X) return self.__sigmoid(np.dot(X, self.theta)) def predict(self, X): return self.predict_prob(X).round() model = LogisticRegression(lr=0.1, num_iter=300000) model.fit(X, y) preds = model.predict(X) (preds == y).mean() plt.figure(figsize=(10, 6)) plt.scatter(X[y == 0][:, 0], X[y == 0][:, 1], color='b', label='0') plt.scatter(X[y == 1][:, 0], X[y == 1][:, 1], color='r', label='1') plt.legend() x1_min, x1_max = X[:,0].min(), X[:,0].max(), x2_min, x2_max = X[:,1].min(), X[:,1].max(), xx1, xx2 = np.meshgrid(np.linspace(x1_min, x1_max), np.linspace(x2_min, x2_max)) grid = np.c_[xx1.ravel(), xx2.ravel()] probs = model.predict_prob(grid).reshape(xx1.shape) plt.contour(xx1, xx2, probs, [0.5], linewidths=1, colors='black'); plt.show()
  • 6. 主成分分析 ◦ 主成分分析(PCA)とは、元データの持つ情報をできるだけ失わずに変数の数を圧縮することができるため、探索的分析の前処 理や予想モデル構築時の前処理に使われる。 from sklearn.preprocessing import StandardScaler import numpy as np import scipy as sp # 可視化ライブラリ import matplotlib.pyplot as plt # RandomStateオブジェクトを作成 sample = np.random.RandomState(1) #2つの乱数を生成 X = np.dot(sample.rand(2, 2), sample.randn(2, 200)).T # 標準化 sc = StandardScaler() X_std = sc.fit_transform(X) # 相関係数の算出とグラフ化 print('相関係数 {:.3f}:'.format(sp.stats.pearsonr(X_std[:, 0], X_std[:, 1])[0])) plt.scatter(X_std[:, 0], X_std[:, 1]) # インポート from sklearn.decomposition import PCA # 主成分分析 pca = PCA(n_components=2) pca.fit(X_std) # パラメータ設定 arrowprops=dict(arrowstyle='->', linewidth=2, shrinkA=0, shrinkB=0) # 矢印を描くための関数 def draw_vector(v0, v1): plt.gca().annotate('', v1, v0, arrowprops=arrowprops) # 元のデータをプロット plt.scatter(X_std[:, 0], X_std[:, 1], alpha=0.2) # 主成分分析の2軸を矢印で表示する for length, vector in zip(pca.explained_variance_, pca.components_): v = vector * 3 * np.sqrt(length) draw_vector(pca.mean_, pca.mean_ + v) plt.axis('equal'); plt.show() 主成分分析のアルゴリズム 1)全データの重心(平均値)を算出 2)重心からデータの分散(ばらつき)が最大となる方 向(第1主成分)を算出 3)第1主成分と直角に交わる(直交)方向で分散が最 大となる箇所(第2主成分)を算出 4)直近の主成分と直交する方向で分散が最大となる箇 所(第3主成分)を算出 5)4)をデータの次元分だけ繰り返す ◦ 第一成分と第二成分を視覚化できた。
  • 7. アルゴリズム ◦ 教師あり学習のアルゴリズムは下記の種類がある。 ◦ 単回帰 ◦ 重回帰 ◦ ロジスティック回帰 ◦ K近傍法 ◦ 決定木 ◦ サポートベクターマシン ◦ ランダムフォレスト ◦ 勾配ブースティング ◦ 教師なし学習のアルゴリズムは下記の種類がある。 ◦ クラスタリング # k-means法を使うためのインポート from sklearn.cluster import KMeans # データ取得のためのインポート from sklearn.datasets import make_blobs # サンプルデータ生成 # 注意:make_blobsは2つの値を返すため、一方 は使用しない「 _ 」で受け取る X, _ = make_blobs(random_state=10) # グラフを描画 # colorのオプションで色付けができる plt.scatter(X[:,0],X[:,1],color='black') # リッジ回帰用のクラス from sklearn.linear_model import Ridge from sklearn.model_selection import train_test_split # 訓練データとテストデータに分割 X = auto.drop('price', axis=1) y = auto['price'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=0) # モデルの構築と評価 linear = LinearRegression() ridge = Ridge(random_state=0) for model in [linear, ridge]: model.fit(X_train,y_train) print('{}(train):{:.6f}'.format(model.__class__.__name__ , model.score(X_train,y_train))) print('{}(test):{:.6f}'.format(model.__class__.__name__ , model.score(X_test,y_test))) Sklearnのライブラリを使うことで、さまざまな種類のア ルゴリズムを使用することができることがわかる。 教師あり学習の方がアルゴリズムが多彩である。
  • 8. サポートベクターマシーン ◦ サポートベクターマシーン(SVM)は、カテゴリを識別する境界線を、マージンが最大となるように引くアルゴリズムである。 ◦ 多次元における超平面を訓練し、データの分類を行う。 ◦ 線形判別関数と最も近いデータ点との距離をマージンと言う。 # データやモデルを構築するためのライブラリ等のインポート from sklearn.datasets import load_breast_cancer # SVMのライブラリ from sklearn.svm import LinearSVC # 訓練データとテストデータを分けるライブラリ from sklearn.model_selection import train_test_split # データの読み込み cancer = load_breast_cancer() # 訓練データとテストデータに分ける X_train, X_test, y_train, y_test = train_test_split( cancer.data, cancer.target, stratify = cancer.target, random_state=0) # クラスの初期化と学習 model = LinearSVC() model.fit(X_train,y_train) # 訓練データとテストデータのスコア print('正解率(train):{:.3f}'.format(model.score(X_train, y_train))) print('正解率(test):{:.3f}'.format(model.score(X_test, y_test))) ◦ 訓練データの正解率は、93.2% ◦ 検証データの正解率は、92.3% ◦ 同じくらいの正解率となった。