붓꽃데이터 (iris.csv) 설명
SepalLength : 꽃받침의 길이
SepalWidth : 꽃받침의 폭
PetalLength : 꽃잎의 길이
PetalWidth : 꽃잎의 폭
Name : 붓꽃의 종류
- Iris-setosa
- Iris-versicolor
- Iris-virginica
1. R + kNN
# 데이터 불러오기 iris <- read.csv("C:/data/iris.csv", header=T, stringsAsFactors=F) |
|
# 데이터 구조 확인 str(iris) |
|
# 데이터셋 나누기 set.seed(1234) iris_sample <- sample(2,NROW(iris),replace=T,prob=c(0.67,0.33)) prop.table(table(iris_sample)) iris_training <- iris[iris_sample==1,1:4] iris_training_label <- iris[iris_sample==1,5]
iris_test <- iris[iris_sample==2,1:4] iris_test_label <- iris[iris_sample==2,5]
|
|
# 훈련 / 예측 library(class) iris_model <- knn(iris_training,iris_test,iris_training_label,k=3) iris_model |
|
# 비교로 정확도 분석 library(gmodels) CrossTable(x=iris_test_label,y=iris_model, prop.chisq = F) |
|
# 모델에 새로운 데이터 넣어보기 iris_test <- data.frame(SepalLength=c(2.0,6.7), SepalWidth=c(7.0,3.1), PetalLength=c(1.0,4.4), PetalWidth=c(0.1,1.4)) iris_model <- knn(iris_training,iris_test,iris_training_label,k=3) iris_model |
2. 파이썬 + 가우시안 나이브베이즈
가우시안 나이브베이즈
- 컬럼들의 값들이 정규분포(가우시안 분포)돼 있다는 가정하에 조건부 확률을 계산하며, 연속적인 성질이 있는 데이터를 분류하는데 적합하다.
# 필요한 라이브러리 불러오기 import pandas as pd |
|
# 데이터 불러오기 / 데이터 확인 |
|
# 빈도수 체크 df.Name.value_counts() |
|
# Iris-setosa 분포 그림으로 그리기
|
|
# 데이터 분리 X_train,X_test,Y_train,Y_test = train_test_split(df.iloc[:,0:4],df['Name'],test_size=0.2) |
|
# 인스턴스 만들기 model = GaussianNB() |
|
# 훈련하기 model.fit(X_train,Y_train) |
|
# 예측하기 predict = model.predict(X_test) |
|
# 혼동행렬 만들기 from sklearn import metrics print(metrics.classification_report(Y_test,predict)) |
|
# 새로운 데이터 예측 iris_test = pd.DataFrame({'SepalLength':[2.0,6.7], 'SepalWidth':[7.0,3.1], 'PetalLength':[1.0,4.4], 'PetalWidth':[0.1,1.4]}) predict = model.predict(iris_test) predict |
|
# 하나의 데이터만 넣고 싶을때(하나의 행, 모든 열) import numpy as np model.predict(np.array([2.0,7.0,1.0,0.1]).reshape(1,-1)) # reshape(1,4) # -1:모든것 model.predict(np.array(iris_test.iloc[1,]).reshape(1,-1)) |
3. 파이썬 + kNN
# 필요한 라이브러리 불러오기 |
|
# 데이터 불러오기 / 구조 확인 iris = pd.read_csv("C:/data/iris.csv") str(iris) |
|
# 데이터셋 분리하기 |
|
# kNN 분류 clf = KNeighborsClassifier(n_neighbors=21) |
|
# 학습 clf.fit(X_train,Y_train) |
|
# 예측 clf.predict(X_test) |
|
# 정확도 분석 clf.score(X_test,Y_test) |
|
# crosstab 보기 pd.crosstab(Y_test,clf.predict(X_test)) |
|
# 리포트 보기 print(classification_report(Y_test,clf.predict(X_test))) |
|
# 새로운 데이터 넣고 예측 |
'인공지능 > 머신러닝' 카테고리의 다른 글
NLTK 자연어 처리 패키지 사용 (0) | 2020.05.14 |
---|---|
베르누이 나이브베이즈 (0) | 2020.05.14 |
나이브베이즈(Naive Bayes) 분류 (0) | 2020.05.12 |
사건과 확률 (0) | 2020.05.12 |
혼동행렬 / 정확도 / 정밀도 / 재현율 / F1 점수 (0) | 2020.05.11 |