가시화 예측 모델의 적용 범위와 적용 구역을 시험해 보다
입문
제작된 예측 모델에 따라 특정한 데이터의 예측을 할 때 이 예측 모델이 어떤 데이터를 활용할 수 있는지에 대한 적용 범위·적용 구역(Applicability Domain, AD)에 대한 생각이 중요해진다.적용 범위를 초과하고 적용 구역을 예측할 때 그 신뢰성은 의심을 받는다.
적용 범위, 적용 영역 정보
이번에 우리는 matplotlib를 통해 그 중의 데이터 밀도를 가시화시켰다.
데이터 밀도 정의
예측 모델은 특정한 데이터가 존재할 때 이 데이터 점의 데이터 밀도를 다음과 같이 정의한다.
이 데이터와 가장 가까운 N개의 학습 데이터 거리의 총계
요즘 이웃법 말이야.거리로서 이번에는 유클리드 거리를 이용했다.
시각화 방법
환경
출처 import numpy as np
from sklearn.datasets import make_regression, make_classification
import argparse
import pandas as pd
import numpy as np
import umap
import matplotlib
import matplotlib.pyplot as plt
def main():
# --------------------------------------
# データの生成
# --------------------------------------
dataX1, y1 = make_regression(n_samples=20, n_features=2, random_state=0)
dataX2, y2 = make_regression(n_samples=30, n_features=2, random_state=0)
dataX1 = dataX1 - 2
dataX2 = dataX2 + 2
datas = np.vstack((dataX1, dataX2))
x = np.arange(-8, 8, 0.4)
y = np.arange(-8, 8, 0.4)
X, Y = np.meshgrid(x, y)
Z = np.zeros([X.shape[0], X.shape[1]])
# ------------------------------
# データ密度の計算
# ------------------------------
for i in range(X.shape[0]):
for j in range(X.shape[1]):
query_x = X[i, j]
query_y = Y[i, j]
#count = len(datas) #考慮する近傍の数
count = 15 # 考慮する近傍の数
#count = 3 # 考慮する近傍の数
#count = 1 # 考慮する近傍の数
distances = [] #近傍を格納する配列
for target_x, target_y in datas:
distance = np.sqrt(np.square(query_x-target_x) + np.square(query_y-target_y))
if len(distances) < count:
distances.append(distance)
print("NEW IN {0} len={1}".format(distance, len(distances)))
else:
distances.sort(reverse=True)
for k, d in enumerate(distances):
if d > distance:
distances[k] = distance
print("IN {0} len={1}".format(distance, len(distances)))
print("OUT {0} len={1}".format(distance, len(distances)))
sum = 0.0
for d in distances:
sum += d
print("SUM={0}".format(sum))
Z[i, j] = sum
fig = plt.figure(figsize=(12, 5))
ax1 = fig.add_subplot(1, 2, 1)
ax1.pcolormesh(X, Y, Z, cmap='hsv')
ax1.scatter(datas[:, 0], datas[:, 1])
plt.show()
if __name__ == "__main__":
main()
가시화
전체 데이터 (50개) 사용 시
K=15시
K=3시
K=1시
고찰
import numpy as np
from sklearn.datasets import make_regression, make_classification
import argparse
import pandas as pd
import numpy as np
import umap
import matplotlib
import matplotlib.pyplot as plt
def main():
# --------------------------------------
# データの生成
# --------------------------------------
dataX1, y1 = make_regression(n_samples=20, n_features=2, random_state=0)
dataX2, y2 = make_regression(n_samples=30, n_features=2, random_state=0)
dataX1 = dataX1 - 2
dataX2 = dataX2 + 2
datas = np.vstack((dataX1, dataX2))
x = np.arange(-8, 8, 0.4)
y = np.arange(-8, 8, 0.4)
X, Y = np.meshgrid(x, y)
Z = np.zeros([X.shape[0], X.shape[1]])
# ------------------------------
# データ密度の計算
# ------------------------------
for i in range(X.shape[0]):
for j in range(X.shape[1]):
query_x = X[i, j]
query_y = Y[i, j]
#count = len(datas) #考慮する近傍の数
count = 15 # 考慮する近傍の数
#count = 3 # 考慮する近傍の数
#count = 1 # 考慮する近傍の数
distances = [] #近傍を格納する配列
for target_x, target_y in datas:
distance = np.sqrt(np.square(query_x-target_x) + np.square(query_y-target_y))
if len(distances) < count:
distances.append(distance)
print("NEW IN {0} len={1}".format(distance, len(distances)))
else:
distances.sort(reverse=True)
for k, d in enumerate(distances):
if d > distance:
distances[k] = distance
print("IN {0} len={1}".format(distance, len(distances)))
print("OUT {0} len={1}".format(distance, len(distances)))
sum = 0.0
for d in distances:
sum += d
print("SUM={0}".format(sum))
Z[i, j] = sum
fig = plt.figure(figsize=(12, 5))
ax1 = fig.add_subplot(1, 2, 1)
ax1.pcolormesh(X, Y, Z, cmap='hsv')
ax1.scatter(datas[:, 0], datas[:, 1])
plt.show()
if __name__ == "__main__":
main()
전체 데이터 (50개) 사용 시
K=15시
K=3시
K=1시
고찰
참고 자료
Reference
이 문제에 관하여(가시화 예측 모델의 적용 범위와 적용 구역을 시험해 보다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kimisyo/items/833ae2e289d01b91a18d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)