[Python] 2D IDW Interpolation (2차원 역거리 가중치 보간법)
2023. 6. 11. 18:44
2차원 IDW (Inverse Distance Weighting) 보간법은 공간 상의 점들의 값을 추정하는 데 사용되는 보간 기법입니다. IDW는 가장 가까운 이웃 점들의 값을 기반으로 추정 값을 계산합니다.
2차원 IDW 보간법을 사용하기 위해서는 다음과 같은 단계를 따릅니다:
추정하려는 지점 주변에 있는 이웃 점들을 선택합니다. 이웃 점들은 보간할 값과 가장 가까운 점들입니다.
선택한 이웃 점들과의 거리를 계산합니다. 일반적으로 유클리드 거리를 사용합니다.
거리에 따른 가중치를 계산합니다. 이 가중치는 거리가 더 가까울수록 더 큰 값을 갖게 됩니다. 일반적으로는 거리의 역수를 사용하여 가중치를 계산합니다.
이웃 점들의 값을 가중치로 가중 평균하여 추정 값을 계산합니다. 가중치가 높은 이웃 점일수록 추정 값에 미치는 영향이 큽니다.
이러한 단계를 반복하여 전체 공간에 대한 보간 값을 계산할 수 있습니다. IDW 보간법은 주어진 이웃 점들에 의존하기 때문에 이웃 점의 선택과 가중치 계산 방법은 보간 결과에 영향을 줄 수 있습니다.
IDW 보간법은 지리 정보 시스템(GIS) 및 공간 데이터 분석 등 다양한 분야에서 사용됩니다.
import pandas as pd
import numpy as np
from scipy.spatial.distance import cdist
data = pd.read_csv('coord.csv')
def idw_interpolation_2d(chip_coords, chip_data, unknown_coords, power=2, k=3):
# chip_coords: 계측된 칩의 좌표 배열 (shape: (n, 2))
# chip_data: 계측된 칩의 데이터 배열 (shape: (n,))
# unknown_coords: 계측되지 않은 칩의 좌표 배열 (shape: (m, 2))
# power: 거리의 역수에 적용되는 지수 값
interpolated_data = []
for unknown_coord in unknown_coords:
distances = cdist([unknown_coord], chip_coords) # 최근접 이웃들과의 거리 계산
weights = 1 / (distances[0][sorted_indices[:k]] ** power) # 거리 역수에 지수 적용
total_weight = np.sum(weights) # 가중치의 합 계산
weighted_data = chip_data @ weights # 거리 역수에 가중치 적용
interpolated_value = np.sum(weighted_data) / total_weight # 보간된 값을 계산
interpolated_data.append(interpolated_value)
return np.array(interpolated_data)
# 예시 데이터(wafer map)
metro_data = data.iloc[0:13,:].astype('float')
intp_data = data.iloc[13:,:]
# 변수 입력
chip_coords = np.array(metro_data.iloc[:,0:2])
chip_data = np.array(metro_data.iloc[:,2])
unknown_coords = np.array(intp_data.iloc[:,0:2])
# idw interpolation 실행
intp_data['value'] = idw_interpolation_2d(chip_coords, chip_data, unknown_coords)
data_final = pd.concat([metro_data,intp_data])
print(data_final)
data_final.to_csv('coord_interp.csv', index=False)
'Python' 카테고리의 다른 글
lightGBM (0) | 2023.07.02 |
---|---|
[Python] GridSearchCV 를 이용한 하이퍼파라미터 최적값 찾기 (0) | 2023.03.19 |
[Python] 데이터 전처리 - 스케일링 (0) | 2023.03.18 |
[Python] Random Forest 최적화 방법 (0) | 2023.03.13 |
머신 러닝 알고리즘 : 선형 데이터 (Regression) - 뉴럴네트워크(MLP) (0) | 2023.03.09 |