5장의 "분류와 군집화"에서 했던 실습과 현재환경에 맞지 않아 오류가 생겼던 부분을 공유하려고 합니다.
나이브 베이즈
다운받은 실습자료 중 5장 분류와 군집화에서 나이브 베이즈 파일을 주피터에 업로드한다.
그 중 gz 파일은 압축을 해제하여 업로드한다.맥에서는 keka 라는 프로그램을 사용하면 편리하게 압축기능을 사용할 수 있다.
그런 다음, 주피터를 열어 해당 파일들을 모두 업로드합니다.
업로드가 완료되면 kddcup_naive.ipynb파일을 더블클릭하여 진입합니다.
오류 1
코드를 실행하면 오류가 생기는데, 이는 이 실습자료는 python2 를 기반으로 작성되어 현재사용하고 있는python3에서의 문법과 다르기 때문입니다. python3에서는print에 괄호 ()를 붙여야 합니다.
구문을 수정하고 다시 run 해보면 제대로 실행됨을 확인할 수 있습니다.
오류 2
현재 categorical_features를 지원하지 않아 다른 파라미터를 사용해야 합니다.
최신 버전에서는 ColumnTransformer와 OneHotEncoder를 함께 사용하여 각 열에 대해 개별적으로 원-핫 인코딩을 적용하는 방식으로 바뀌었습니다. categorical_features를 사용하지 않고, ColumnTransformer를 이용하여 열을 선택하고 변환할 수 있습니다.
오류 3
요약하자면 열의 개수가 70개가 되지 않아 오류가 발생했다고 나옵니다.
이유는 기존의 코드로는 onehot 인코딩 사용 시 한번 인코딩마다 열의 개수가 늘어나서 70번째 인덱스를 참조할 수 있었는데
새로 짠 코드는 한 번에 인코딩을 하기 때문에 70번째 열이 생성되기 전에 인덱스를 참조해서 참조가 불가능하기 때문입니다.
그러므로 각각 인코딩 후 인덱스를 참조하도록 코드를 수정합니다.
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
# Label Encoding
labelencoder_x_1 = LabelEncoder()
labelencoder_x_2 = LabelEncoder()
labelencoder_x_3 = LabelEncoder()
x[:, 1] = labelencoder_x_1.fit_transform(x[:, 1])
x[:, 2] = labelencoder_x_2.fit_transform(x[:, 2])
x[:, 3] = labelencoder_x_3.fit_transform(x[:, 3])
# sparse 대신 sparse_output 사용
column_transformer_1 = ColumnTransformer(
transformers=[
('onehot1', OneHotEncoder(sparse_output=False), [1])
],
remainder='passthrough'
)
x = column_transformer_1.fit_transform(x)
column_transformer_2 = ColumnTransformer(
transformers=[
('onehot2', OneHotEncoder(sparse_output=False), [4])
],
remainder='passthrough'
)
x = column_transformer_2.fit_transform(x)
column_transformer_3 = ColumnTransformer(
transformers=[
('onehot3', OneHotEncoder(sparse_output=False), [70])
],
remainder='passthrough'
)
x = column_transformer_3.fit_transform(x)
# 타겟 변수 변환
labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)
print(x.shape, y.shape)
아래와 같이 결과가 출력되면 성공입니다.
오류 4
x not defined = 혹시 코드를 처음부터 실행하지 않고 중간부터 실행했는지 확인합니다.
K-Means 클러스터링
책에서 제시하는 사이트 주소가 다른 곳으로 바뀌었습니다.
https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/