ย ์ด ๊ธ์์ ๋ค๋ฃฐ ๊ฒ์ย https://www.kaggle.com/prathamtripathi/drug-classificationย ์ด ์ฌ์ดํธ์ ์๋ ๋ฐ์ดํฐ์
์ ํ์ฉํ์ฌ์ ์ด๊ฒ ์ต์ข
์ ์ผ๋ก ๋ฌด์จ ์ฝ์ธ์ง ์์ธกํ ๊ฒ ์ด์์.ย k-์ต๊ทผ์ ์ด์ classifier ๋ชจ๋ธ์ ํ์ฉํ ๊ฒ ์ด๊ตฌ์ฉ..
๋ฐฐ์ธ ๊ฒ์ ์๋์ ๊ฐ์์
one-hot encodingย ํ๋ ๋ฐฉ๋ฒ
k-neareset neighbor classifier model ์ฌ์ฉ๋ฒ
๋ฐ์ดํฐ์ ํ์ ์ ํด๋ณด์ฃต
์ฑ๋ณ, ๋์ด, ์ฝ๋ ์คํธ๋กค, Na-Kย ๋ฑ์ด ์๊ณ ๊ฒฐ๋ก ์ ์ผ๋ก ์ฝ ์ด๋ฆ์ด ์์ด์ฉ
์ด๋ค ์ฑ๋ณ๊ณผ ๋์ด์ ๊ดํด์ ํน์ ํ ์ฝ์ด ์ฝ๋ ์คํธ๋กค๊ณผ Na-K ๊ฐ์ ๊ทธ๋ฆฌ ํ๊ฒ ๋ง๋ค์๋ค๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ณผ ์ ์๊ฒ ๋ค์ฉ ใ ใ ใ .
์ ๊ทธ๋ผ ์ด๋ป๊ฒ ๋ชจ๋ธ์ ๋๋ฆด๊น์.
์ฝ์ ์ฑ๋ณ๊ณผ ๋์ด์ ๋ฐ๋ผ ํธ์ฐจ๊ฐ ๊ฐ๋ฆฌ๋ ๊ฒ์ด์ฃ ? ๋ฐ๋ผ์ ์ฑ๋ณ์ ์ฑ๋ณ๋๋ก ๋ฌถ๊ณ , ๋์ด๋ 20๋, 30๋, 40๋๋ก ๋ฌถ์ด์ ์งํํ๋ฉด ๋์ฑ ์ข๊ฒ ์ง์.
ํ์ง๋ง.... ๊ทธ๋ ๊ฒ ์ง๋ ๊ฒ์ ์ค๋ ๋ฐฐ์ธ ๊ฒ๊ณผ ๊ฑฐ๋ฆฌ๊ฐ ์์ด์ ํจ์คํ ๊ฒ์ฉ ใ ใ ใ .
path = "/kaggle/input/drug-classification/drug200.csv"
df = pd.read_csv(path)
header = df.columns
feature_names = ['Age','Sex','BP','Cholesterol','Na_to_K']
data = df[feature_names].to_numpy()
target = df[['Drug']].to_numpy()
์ด๋ ๊ฒ ํด์ ๋ฐ์ดํฐ๋ ์์ธกํ ํ๊ฒ์ ๋ถ๋ฆฌํ์ด์ฉ. ๊ทธ๋ฐ๋ฐ ์์ง ํ ๊ฒ ๋จ์์ฃ . ๋ฐ๋ก ์-ํซ ์ธ์ฝ๋ฉ์ด์์ฉ.
์ฌ์ดํท๋ฐ ๋ชจ๋ธ์์ ์๊ตฌํ๋ ๊ฒ์ด๊ธฐ๋ ํ๊ณต.. ์ซ์๋ ๊ทธ๋ํ์ ์ธ ํํ์ด ๊ฐ๋ฅํ์ฃ . ๋ฌธ์๋ ๊ณ๋จ์ ํํ์ธ๋ฐ ๋ฐํด์์ฉ. ์ด์จ๋ ์ซ์๋ก ๋ฐ๊พธ์ด์ค์๋น.
one_hot_encoding_char = {"F":0, "M":1, "NORMAL":0, "HIGH":1,"LOW":2}
def one_hot_encode(arr, char):
result = arr
for i in range(0, arr.size):
result[i] = char[arr[i]]
return result
data[:,1] = one_hot_encode(data[:,1], one_hot_encoding_char)
data[:,2] = one_hot_encode(data[:,2], one_hot_encoding_char)
data[:,3] = one_hot_encode(data[:,3], one_hot_encoding_char)
์ด์ ๋ชจ๋ธ์ ๋ถ๋ฌ์ค๊ณ , ํ ์คํธ์ ๊ณผ ํธ๋ ์ด๋์ ์ ๋ถ๋ฆฌํฉ์๋ค. ์ต์ข ์ ๊ธ๋ก ๊ณผ์ ํฉ์ธ์ง ์๋์ง ํ๋ณํ๋ ๋ชฉํ๋ฅผ ์ํด์์ฉ.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(data, target, random_state=0)
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
์ด์ ์๋ ์ ๋นํ ์ ์กฐ์ ํ์ธ์ฉ~~
predicted = knn.predict(X_test)
score = 0
for i in range(predicted.shape[0]):
boolean = predicted[i]==y_test[i]
print("{} == {} ? {}".format(predicted[i], y_test[i], boolean))
if(boolean == True):
score+=1
print("Score is {}%".format(score / predicted.shape[0] * 100))
๋!
์ฌ์ดํท๋ฐ์ผ๋ก ์ฝ๊ฒ KNN ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ ์ ์๊ฒ ์ค๋ช ํด์ฃผ์ จ๋ค์. ์ข์ ๊ธ ์ ๋ดค์ต๋๋ค.