딥 러닝과 기계 학습의 회귀를 실측치와 예측치의 관계 그래프로 비교하고 싶었다.
12539 단어 PyTorch파이썬scikit-learnDeepLearning
DeepLearning에서 나오는 그래프는
지금 이 책을 공부하고 있습니다.
이동하면서 배우기 PyTorch 프로그래밍 입문
항상 DeepLearning에서 샘플로 나오는 그래프는 이런 그래프입니다.
Minibatch에서 계산하면 Epoch 횟수와 Loss 데이터로 예측이 잘 작동하는지 여부를 보여주는 그래프가 나옵니다. 이것은 이것으로 좋지만 ....
처음에는 회귀의 샘플 프로그램이 붙어 있습니다만, 여기에서도, 위의 그래프 밖에 나오지 않습니다.
scikit-learn
의 기계 학습에서 시작하기 시작한 저는 딥 러닝에서는 실측치와 예측값의 이런 그래프를 왜 쓰지 않을 것이라고 항상 궁금합니다.같은 그래프로 그리지 않으면 기계 학습과 딥 러닝 회귀의 비교를 시각화 할 수 없습니다.
그렇게 생각했기 때문에, 딥 러닝의
PyTorch
의 공부하면서, 그래프를 그려 보았습니다.참고로 한 프로그램은
이동하면서 배우기 PyTorch 프로그래밍 입문 의 제3장 「당뇨병의 예후 예측」의 프로그램을 베이스로, 데이터를 보스턴의 집 가격의 데이터 세트로 변경해 사용했습니다.
원래 프로그램은
htps //w w. 오. 이. jp/보오 k/9784274226403/
의 Section3-3.ipynb입니다.
변경점만 아래에 프로그램을 작성합니다.
보스턴 하우스 가격 데이터 세트를 딥 러닝으로 회귀
「이동하면서 배우는 PyTorch 프로그래밍 입문」의 제3장의 당뇨병의 데이터 세트의 딥 러닝 회귀로부터 보스톤의 데이터 세트로 변경하는 변경점은 이하의 곳만입니다.
기본은
diabetes
→ boston
로 변경하여 데이터 세트를 변경합니다.#元のサンプルプログラムの次の部分を変更
#サンプルプログラム
#データセットの読み込み
from sklearn.datasets import load_diabetes
diabetes = load_diabetes()
# データフレームに変換
df = pd.DataFrame(diabetes.data, columns=diabetes.feature_names)
# 1年後の進行度の追加
df['target'] = diabetes.target
# データセットの可視化
sns.pairplot(df, x_vars=diabetes.feature_names, y_vars='target')
plt.show()
# データセットの読み込み
diabetes = load_diabetes()
data = diabetes.data # 特徴量
label = diabetes.target.reshape(-1, 1) # 一年後の糖尿病の進行度
# ハイパーパラメータの定義
D_in = 10 # 入力次元: 10
#上の部分を下記のように変更
#基本的にdiabetes → boston に変更する
#ボストンの家のデータセットへ変更
#データセットの読み込み
from sklearn.datasets import load_boston
boston= load_boston()
# データフレームに変換
df = pd.DataFrame(boston.data, columns=boston.feature_names)
# 1年後の進行度の追加
df['target'] = boston.target
# データセットの読み込み
boston = load_boston()
data = boston.data # 特徴量
label = boston.target.reshape(-1, 1) # ボストンの家の価格
# ハイパーパラメータの定義
D_in = 13 # 入力次元: 13
주의점은, 입력의 특징량이, 당뇨병의 데이터 세트가 10에 대해, 보스턴의 집 가격의 데이터 세트가 13이기 때문에, 딥 러닝의 입력의 차원도 변경할 필요가 있는 점이다.
이제 보스톤 데이터 세트에서 회귀 계산을 할 수 있습니다.
계산은 GPU(cuda)로 계산하고 있습니다.
결과는 다음과 같습니다.
정밀도가 현명하지만, 그래프를 그리고 싶을 뿐이므로, 이대로 다음에 갑니다.
보스턴 하우스 데이터 세트에서 랜덤 포리스트 회귀
이것은 간단합니다.
scikit-learn
의 계산은 매우 간단하다고 생각합니다.from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import r2_score
import matplotlib.pyplot as plt
rg = RandomForestRegressor(n_jobs=-1, random_state=0)
rg.fit(train_data,train_label)
test_predict = rg.predict(test_data)
rg_scorer = r2_score(test_label, test_predict)
print('ランダムフォレストのR2:{:.3g}'.format(rg_scorer))
plt.scatter(test_label, test_predict)
plt.xlabel("measured_value")
plt.ylabel("predict_value")
plt.show()
#ランダムフォレストのR2:0.724
익숙한 그래프를 그렸습니다.
Pytorch의 딥 러닝으로 그래프를 그리려면
포인트는, 예측 결과는, gpu(cuda)로 취급하기 위한
tensor
형식이 되어 있기 때문에, 그것을 cpu로 취급할 수 있는 형식에 되돌려, 한층 더 numpy
로 할 필요가 있습니다. .to('cpu').detach().numpy().copy()
이 부분입니다.#予測結果のグラフ
import numpy as np
# ディープラーニングを評価モードに設定
net.eval()
#tesonr形式になっているtestデータセットの特徴量データをdevice(gpu:cuda)に送る。
data = test_x.to(device)
#gpuに送ったデータを評価モードのDLで予測する
y_pred = net(data)
#ここでy_predは、gpu(cuda)で計算するtensor形式なので、これをcpuで扱うnumpyに戻す必要がある。
#.to('cpu')で、gpuからcpuモードに戻す
# .detach().numpy().copy()で、tensor形式からnumpy形式に戻して、コピーする
y_pred_cpu = y_pred.to('cpu').detach().numpy().copy()
from sklearn.metrics import r2_score
dl_scorer = r2_score(test_label, y_pred_cpu)
print('ディープラーニングのR2:{:.3g}'.format(dl_scorer))
#ディープラーニングのR2:0.718
PyTroch
에서 사용하는 데이터는 numpy
에서 tensor
형식으로 변경하여 CPU로 계산할지 GPU로 계산할지에 따라 달라집니다. 예측 결과를 matplotlib
로 그래프로 쓰려면 'tensor' 형식에서 numpy
로 GPU에서 CPU로 되돌려야 합니다.이것은 한 줄로 쓸 수 있습니다.
y_pred_cpu = y_pred.to('cpu').detach().numpy().copy()
to('cpu')
에서 gpu에서 cpu 모드로 돌아가기detach().numpy()
에서 numpy
형식으로 되돌립니다.numpy
로 돌아오면 나중에 랜덤 포리스트 결과와 딥 러닝 결과를 함께 그래프로 만드십시오.DeepLearning과 RandomForest의 결과 비교
Pytorch
의 딥 러닝의 설정이 적당하기 때문에, 그다지 정밀도는 좋지 않습니다만, 이것으로 랜덤 포레스트와 딥 러닝의 비교의 가시화를 할 수 있었습니다.
Reference
이 문제에 관하여(딥 러닝과 기계 학습의 회귀를 실측치와 예측치의 관계 그래프로 비교하고 싶었다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/motoyuki1963/items/97056c0366f5498f5d0f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)