파이톤으로 기계 학습의 한 끝을 쓰다듬다
R로 이 근처 강좌를 추천할 때 아이리스 데이터를 사용하지만 파이톤에 있나요?→ 있는 것 같다.
R로 기계를 배우다
분류 & 판별의 예
우선 R로 해보세요.R로 식별기를 만들고, SVM, 뉴럴넷, 네이비베이지, 랜덤포레스트로 식별기를 만들고, 그저 만들어낸다면 기본적으로 아무것도 고려할 필요가 없다.각자의 분류 방법을 사용하고 훈련팀을 이용하여 식별기를 제작하여 테스트팀이 그 식별기로 정확하게 분류할 수 있는지 평가한다.
R 데이터(iris)를 이용하면 창포, 창포, 제비꽃 등의 데이터를 활용할 수 있다.
이것은 꽃받침이 길고 꽃받침이 넓으며 꽃잎의 넓이를 설명하는 변수이며, 목적 변수는 아이리스의 품종(setosa,versica,virginica)으로 총 150개의sample 데이터이다.테이블.
우선 Sample()로 반을 무작위로 훈련팀으로 나누고 나머지는 테스트팀으로 바꾼다.## irisデータの読み込み
data(iris)
## 半分をトレーニングセットにするために、ランダムに選択する
train_ids <- sample(nrow(iris), nrow(iris)*0.5)
## トレーニングセットの作成
iris.train <- iris[train_ids,]
## 残り半分をテストセットに
iris.test <- iris[-train_ids,]
그나저나 아이리스의 3가지 품종, 세토사, 버시아, 버지니아는 아래의 꽃이다.다 똑같잖아!꽃잎 모양으로 이것을 구별하는 것은 벌칙 게임이다.
### SVM実行
library(kernlab)
iris.svm <- ksvm(Species~., data=iris.train)
svm.predict <- predict(iris.svm, iris.test)
### 結果表示
table(svm.predict, iris.test$Species)
### neuralnet実行
library(nnet)
iris.nnet<-nnet(Species ~ ., data = iris.train, size = 3)
nnet.predict <- predict(iris.nnet, iris.test, type="class")
### 結果表示
table( nnet.predict, iris.test$Species)
### naivebayes実行
library(e1071)
iris.nb <- naiveBayes(Species~., iris.train)
nbayes.predict <- predict(iris.nb, iris.test)
### 結果表示
table(nbayes.predict, iris.test$Species)
### randomforest実行
library(randomForest)
iris.rf <- randomForest(Species~., iris.train)
rf.predict <- predict(iris.rf, iris.test)
### 結果表示
table(rf.predict, iris.test$Species)
시행해보면 어떤 수법을 사용하느냐에 따라 대체로 정확도 73/75 정도도 식별할 수 있다.백발백중이라고는 할 수 없지만 그건 매개 변수 조절 같은 것 때문일 수 있죠.
그럼 파이토존에서 같은 일을 해보기 위해 scikit-learn을 사용하세요.상세한 상황은 scikit-learn의 자습서에 쓰여 있다.
파이썬 인식
Pythn으로 SVM 만들기
원래'위처럼 R로 간단히 할 수 있는 일'은 왜 자신에게 미지의 파이톤일까.이렇게 말하면 파이톤에서 해보고 싶다고밖에 할 수 없다.저쪽에 산이 있으면 올라가고, 물웅덩이가 있으면 올라가고, 테이블이 있으면 먹으러 간다.
Anaconda가 설치되면 scikit-learn이 설치되어 있기 때문에 import을 시작합니다.import을 해야 하지만 라이브러리 이름은sklearn입니다.이 도서관은 데이터sets로서iris도load가 가능합니다.from sklearn import svm, datasets
iris = datasets.load_iris()
안에 있는 내용에 대해서는 print, print인 줄 알지만 iris. target입니다.데이터의 설명 변수는 아이리스입니다.target에 목적 변수가 있습니다.훈련용 데이터 집합과 테스트용 데이터 집합으로 분할한다.R과 Sample () 함수이지만,scikit-learn의 경우,sklearn.cross_varidation 중traintest_split () 방법이 있습니다.따라서 R을 할 때와 마찬가지로 절반을 트레이닝 그룹(iris data train, iris target train)과 테스트 그룹(iris data test, iris target test) 두 부분으로 나눈다.from sklearn import svm, datasets
from sklearn.cross_validation import train_test_split
import numpy as np
iris = datasets.load_iris()
iris_data_train, iris_data_test, iris_target_train, iris_target_test = train_test_split(iris.data, iris.target, test_size=0.5)
이 트레이닝 세트로 식별기를 제작한다.SVM에도 여러 가지 선형이 있습니까?비선형?여러 가지 파라미터를 설정할 필요가 있지만, 여기는 모두 기본값입니다.svc = svm.SVC()
svc.fit(iris_data_train, iris_target_train)
svc.predict(iris_data_test)
fit()와predict()는 두 줄로 나뉘어 쓰지만 초기화해서 훈련 데이터를 먹게 하고 테스트 데이터를 먹게 하기 때문에 한 줄로 쓸 수 있다.iris_predict = svm.SVC().fit(iris_data_train, iris_target_train).predict(iris_data_test)
이거 svc.predit () 결과 및 iris predicttarget_테스트와 일치율을 보면 됩니다.R에서 테이블 (svm.predict,iris.test$Species)처럼 표 형식으로 출력되었기 때문에 똑같이 해 보십시오.이 시계 보세요.마릭스라고 합니다.accuracy_score에서도 정확도를 빠르게 얻을 수 있다.from sklearn.metrics import confusion_matrix, accuracy_score
print (confusion_matrix(iris_target_test, iris_predict))
print (accuracy_score(iris_target_test, iris_predict))
confusion_matrix()는 공식 문서에 따라 첫 번째 파라미터는 진값이고 두 번째 파라미터는 감별기의 판별값이기 때문에 각각 이렇게 전달한다.
R보다 간단한 유형량이 많았지만 같은 결과를 얻었다.
위의 문서에 따라 이 문서도 부도에 표시할 수 있다.먼저, confusion정규화된 matrix의 각 줄은 합계가 1이다.이 식은 스스로 쓸 수 없구나.cm = confusion_matrix(iris_target_test, iris_predict)
cm_normalized = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
이 정규화된 confusionmatrix를 사용하고 matplotlib의 기능을 사용하여 heatmap화합니다.겸사겸사 말씀드리지만, svc.predict () 를 하면 매번 결과가 미묘하게 다르기 때문에 위 그림과 아래 그림은confusion-matrix의 내용은 약간 다르다.def plot_confusion_matrix(cm, title='Confusion matrix', cmap=plt.cm.Blues):
''' confusion_matrixをheatmap表示する関数
Keyword arguments:
cm -- confusion_matrix
title -- 図の表題
cmap -- 使用するカラーマップ
'''
plt.imshow(cm, interpolation='nearest', cmap=cmap)
plt.title(title)
plt.colorbar()
tick_marks = np.arange(len(iris.target_names))
plt.xticks(tick_marks, iris.target_names, rotation=45)
plt.yticks(tick_marks, iris.target_names)
plt.tight_layout()
plt.ylabel('True label')
plt.xlabel('Predicted label')
이번에는 svc=svm.SVC () 와 같은 상황은 모두 기본값입니다. 물론 분류를 위한kernel은 많이 사용할 수 있습니다.
scikit-learn의 공식 홈페이지Examples 페이지에는 다양한 시위 행진과 튜토리얼이 게재돼 있으며, 필요하면 이곳에서 단서를 찾을 수 있다.
R이 한 것처럼 NeuralNet의 경우,naive Bayes의 경우,random Forest는 어때요? 신경 쓰이지만 아마 똑같을 거예요(조사 안 했어요).
이번 결론.
머신러닝의 일부를 접하는 느낌이 들었지만 아이리스가 창포인지 창포인지 허둥대는지 끝내 알 수 없었다.
추기
당초 제목은'파이톤에서 머신러닝 터치를 해보자'였으나'터치가 가장 시끌벅적한 곳이라는 뜻으로 제목이 맞지 않는다'는 취지로 수정됐다.
"파이톤은 SVM으로 판별기를 만들 수 있다"며 개인적으로는 정서를 고조시키는 포인트라고 생각하지만, 독선적인 것 같다.SVM처럼 머신러닝 미안하다고다시 시작하겠습니다.
이번 코드.
## irisデータの読み込み
data(iris)
## 半分をトレーニングセットにするために、ランダムに選択する
train_ids <- sample(nrow(iris), nrow(iris)*0.5)
## トレーニングセットの作成
iris.train <- iris[train_ids,]
## 残り半分をテストセットに
iris.test <- iris[-train_ids,]
### SVM実行
library(kernlab)
iris.svm <- ksvm(Species~., data=iris.train)
svm.predict <- predict(iris.svm, iris.test)
### 結果表示
table(svm.predict, iris.test$Species)
### neuralnet実行
library(nnet)
iris.nnet<-nnet(Species ~ ., data = iris.train, size = 3)
nnet.predict <- predict(iris.nnet, iris.test, type="class")
### 結果表示
table( nnet.predict, iris.test$Species)
### naivebayes実行
library(e1071)
iris.nb <- naiveBayes(Species~., iris.train)
nbayes.predict <- predict(iris.nb, iris.test)
### 結果表示
table(nbayes.predict, iris.test$Species)
### randomforest実行
library(randomForest)
iris.rf <- randomForest(Species~., iris.train)
rf.predict <- predict(iris.rf, iris.test)
### 結果表示
table(rf.predict, iris.test$Species)
Pythn으로 SVM 만들기
원래'위처럼 R로 간단히 할 수 있는 일'은 왜 자신에게 미지의 파이톤일까.이렇게 말하면 파이톤에서 해보고 싶다고밖에 할 수 없다.저쪽에 산이 있으면 올라가고, 물웅덩이가 있으면 올라가고, 테이블이 있으면 먹으러 간다.
Anaconda가 설치되면 scikit-learn이 설치되어 있기 때문에 import을 시작합니다.import을 해야 하지만 라이브러리 이름은sklearn입니다.이 도서관은 데이터sets로서iris도load가 가능합니다.
from sklearn import svm, datasets
iris = datasets.load_iris()
안에 있는 내용에 대해서는 print, print인 줄 알지만 iris. target입니다.데이터의 설명 변수는 아이리스입니다.target에 목적 변수가 있습니다.훈련용 데이터 집합과 테스트용 데이터 집합으로 분할한다.R과 Sample () 함수이지만,scikit-learn의 경우,sklearn.cross_varidation 중traintest_split () 방법이 있습니다.따라서 R을 할 때와 마찬가지로 절반을 트레이닝 그룹(iris data train, iris target train)과 테스트 그룹(iris data test, iris target test) 두 부분으로 나눈다.from sklearn import svm, datasets
from sklearn.cross_validation import train_test_split
import numpy as np
iris = datasets.load_iris()
iris_data_train, iris_data_test, iris_target_train, iris_target_test = train_test_split(iris.data, iris.target, test_size=0.5)
이 트레이닝 세트로 식별기를 제작한다.SVM에도 여러 가지 선형이 있습니까?비선형?여러 가지 파라미터를 설정할 필요가 있지만, 여기는 모두 기본값입니다.svc = svm.SVC()
svc.fit(iris_data_train, iris_target_train)
svc.predict(iris_data_test)
fit()와predict()는 두 줄로 나뉘어 쓰지만 초기화해서 훈련 데이터를 먹게 하고 테스트 데이터를 먹게 하기 때문에 한 줄로 쓸 수 있다.iris_predict = svm.SVC().fit(iris_data_train, iris_target_train).predict(iris_data_test)
이거 svc.predit () 결과 및 iris predicttarget_테스트와 일치율을 보면 됩니다.R에서 테이블 (svm.predict,iris.test$Species)처럼 표 형식으로 출력되었기 때문에 똑같이 해 보십시오.이 시계 보세요.마릭스라고 합니다.accuracy_score에서도 정확도를 빠르게 얻을 수 있다.
from sklearn.metrics import confusion_matrix, accuracy_score
print (confusion_matrix(iris_target_test, iris_predict))
print (accuracy_score(iris_target_test, iris_predict))
confusion_matrix()는 공식 문서에 따라 첫 번째 파라미터는 진값이고 두 번째 파라미터는 감별기의 판별값이기 때문에 각각 이렇게 전달한다.R보다 간단한 유형량이 많았지만 같은 결과를 얻었다.
위의 문서에 따라 이 문서도 부도에 표시할 수 있다.먼저, confusion정규화된 matrix의 각 줄은 합계가 1이다.이 식은 스스로 쓸 수 없구나.
cm = confusion_matrix(iris_target_test, iris_predict)
cm_normalized = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
이 정규화된 confusionmatrix를 사용하고 matplotlib의 기능을 사용하여 heatmap화합니다.겸사겸사 말씀드리지만, svc.predict () 를 하면 매번 결과가 미묘하게 다르기 때문에 위 그림과 아래 그림은confusion-matrix의 내용은 약간 다르다.def plot_confusion_matrix(cm, title='Confusion matrix', cmap=plt.cm.Blues):
''' confusion_matrixをheatmap表示する関数
Keyword arguments:
cm -- confusion_matrix
title -- 図の表題
cmap -- 使用するカラーマップ
'''
plt.imshow(cm, interpolation='nearest', cmap=cmap)
plt.title(title)
plt.colorbar()
tick_marks = np.arange(len(iris.target_names))
plt.xticks(tick_marks, iris.target_names, rotation=45)
plt.yticks(tick_marks, iris.target_names)
plt.tight_layout()
plt.ylabel('True label')
plt.xlabel('Predicted label')
이번에는 svc=svm.SVC () 와 같은 상황은 모두 기본값입니다. 물론 분류를 위한kernel은 많이 사용할 수 있습니다.
scikit-learn의 공식 홈페이지Examples 페이지에는 다양한 시위 행진과 튜토리얼이 게재돼 있으며, 필요하면 이곳에서 단서를 찾을 수 있다.
R이 한 것처럼 NeuralNet의 경우,naive Bayes의 경우,random Forest는 어때요? 신경 쓰이지만 아마 똑같을 거예요(조사 안 했어요).
이번 결론.
머신러닝의 일부를 접하는 느낌이 들었지만 아이리스가 창포인지 창포인지 허둥대는지 끝내 알 수 없었다.
추기
당초 제목은'파이톤에서 머신러닝 터치를 해보자'였으나'터치가 가장 시끌벅적한 곳이라는 뜻으로 제목이 맞지 않는다'는 취지로 수정됐다.
"파이톤은 SVM으로 판별기를 만들 수 있다"며 개인적으로는 정서를 고조시키는 포인트라고 생각하지만, 독선적인 것 같다.SVM처럼 머신러닝 미안하다고다시 시작하겠습니다.
이번 코드.
Reference
이 문제에 관하여(파이톤으로 기계 학습의 한 끝을 쓰다듬다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fukuit/items/b94e58191790bfce7f8b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)