파이톤으로 기계 학습의 한 끝을 쓰다듬다

18103 단어 svmPython
기계학은 어떻게 배우냐면 자기 생각대로 쓰면 아마 이런 느낌일 거예요.
  • 분류
  • 컴백
  • 판별
  • 다른 것도 있을지 몰라도 생각이 안 나도 괜찮아.
    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처럼 머신러닝 미안하다고다시 시작하겠습니다.

    이번 코드.

  • https://github.com/fukuit/Python_SelfLearning/blob/master/ml_svm.py
  • 좋은 웹페이지 즐겨찾기