영상 처리 3. Video Error Synthesized

행동하는 개발자·2023년 3월 8일
0

video

목록 보기
3/4

k-neighbors

k-최근접 이웃은 머신러닝에서 사용되는 알고리즘이다. 유사한 특성을 가진 데이터는 유사한 범주에 속하는 경향이 있다는 가정하에 사용한다.

  • 정규화: 이 알고리즘은 모든 특성들을 모두 고르게 반영하기 위해 정규화를 해주곤 한다.

  • k: k 값이 너무 적을 때도 Overfitting이 일어날 수 있고, k 값이 너무 클 때도 Underfitting이 일어날 수 있다. 그래서 n_neighbors 의 값을 i로 두고, 원하는 number의 값으로 예측해보고 더 높은 정확도의 값을 선택할 수 있다.

split

문자열.split(sep="구분자",maxsplit=분할횟수)

와 같이 분할할 수 있다. 문자열 split은 maxsplit을 사용하지 않으면 구분자를 기준으로 무한히 구분하여 잘라서 리스트를 만드는데, maxsplit 파라미터는 그 때 유용하게 사용할 수 있는 것 같다.

Chained Assignment

Assignment는 특정 셀에 값을 할당하거나 또는 특정 칼럼에 배열을 할당하는 것을 말하며 setting 또는 set 연산의 의미를 갖는다.

Access는 특정 셀, 특정 행 또는 칼럼에 접근하는 것을 말하며 getting 또는 get연산의 의미를 갖는다.

import pandas as pd
 
df = pd.DataFrame()
## Assignment
df['GROUP'] = [1, 1, 1, 2, 2, 2] ## 칼럼에 배열 할당
df['VALUE'] = [1.2, 1.3, 1.4, 3.6, 3.7, 3.1] ## 칼럼에 배열 할당
df.loc[2, 'VALUE'] = 100 ## 특정 셀에 값 할당
 
## Access
df.loc[2, 'VALUE'] ## 특정 셀 추출
df[df['GROUP']==1] ## 특정행 추출
df[['GROUP']] ## 특정 칼럼 추출
 
df

Chained Assignment는 아래와 같이 특정 조건으로 필터링을 함과 동시에 값을 할당하는 것을 말한다.

df[df['GROUP'] == 1]['VALUE'] = 10
df

이 경우 에러메시지가 발생하는데, 이 에러메세지는 데이터프레임의 슬라이스 복사본에 값을 할당하려고 시도한다는 뜻이다. 슬라이스는 get 연산이고 할당은 set 연산이며 위 코드에서 두 연산은 서로 연결되어 있다.

pandas는 get 연산과 set 연산이 연결되어 있다면, 그 결과가 복사본인지 원래 데이터에서 일부를 나타내는 것 중 어떤 것이 나올 지 예측이 불가능하다.

이 경고가 나타나는 이유는 pandas가 작성자의 의도를 모르거나 pandas 자신도 어떤 결과가 나올지 예측이 불가능하기 때문에 이에 대한 경고를 알려주기 위함이다.

즉 이 경우는

  1. 원본을 바꾸고 싶은 것인지

  2. group이 1인 경우만 따로 떼어내서 새로운 데이터를 만들고 거기에 value를 바꾸고 싶은지

df[df['GROUP'] == 1]['VALUE'] = 10

df.loc[df['GROUP'] == 1, 'VALUE'] = 10

아래와 같이 변경된 코드가 내가 접근하는 데이터가 원본 데이터 df 임을 명확히 알려주는 것이다.

Hidden Chaining

특정 조건으로 행을 추출한 것을 다른 변수에 선언하여 숨긴 다음 assignment를 수행하는 것

## 새로운 원본 데이터 생성
df = pd.DataFrame()
df['GROUP'] = [1, 1, 1, 2, 2, 2] ## 칼럼에 배열 할당
df['VALUE'] = [1.2, 1.3, 1.4, 3.6, 3.7, 3.1] ## 칼럼에 배열 할당
 
## Hidden Chaining
aa = df[df['GROUP'] == 1] ## 필터링 결과 숨김
aa.loc[0, 'VALUE'] = 10 ## Assignment
aa

이 코드도 위의 Chained Assignment와 같은 에러 메세지가 발생합니다. 하지만 데이터를 출력하면 원하는 바와 같이 잘 변경된 것을 확인할 수 있습니다. 이 문제는 pandas에서 copy를 사용하여 새로운 복사본을 만들어서 새로운 복사본에 데이터를 새로 할당할거야 라고 명확하게 해줌으로써 해결하는 것을 볼 수 있습니다.

출처: https://hleecaster.com/ml-knn-concept/, https://zephyrus1111.tistory.com/429

profile
끊임없이 뭔가를 남기는 사람

0개의 댓글