k近隣アルゴリズムと質素なベキスアルゴリズム

10157 ワード

機械学習——k近隣アルゴリズムと質素なベキスアルゴリズム
  • k近隣アルゴリズム
  • シンプルなベイマス
  • 理論基礎:
  • 精度とリコール率
  • クロス検証とグリッド検索
  • k近隣アルゴリズム
    定義:1つのサンプルが特徴空間のk個の最も似ている(すなわち、特徴空間の中で最も近い)サンプルの多くがあるカテゴリに属する場合、このサンプルもこのカテゴリの計算距離式に属します.ヨーロッパ式距離で定義されています.(a 1−b 1)2+.,.+(a n−b n)2\sqrt{(a−b 1)+2+(a−n)
    上記の式からk近隣アルゴリズムは標準化処理が必要であることが分かります.
  • slearn.neighbors.KNeighbors Class ifer(n neighbors=5,algorithm=aut)
  • n_neighbors:intオプション(デフォルト=5)、k_neighborsは、デフォルトで使用される隣人数
  • を照会する.
  • algorithm:{atot”、“ballautree”、“kdture”、“bruute”、最近の隣人を計算するためのアルゴリズムは任意です.treeはBallTree、kd_を使います.tree'はKDTを使用します.aut’はfit法に渡す値に基づいて最適なアルゴリズムを決定することを試みる.(異なる実装形態が効率に影響する)
  • from sklearn.neighbors import KNeighborsClassifier
    knn = KNeighborsClassifier(n_neighbors = 5)
    knn.fit(x_train, y_train)
    y_predict = knn.predict(x_test) #            
    knn.score(x_test, y_test) #           
    
    アルゴリズム解析1、利点:簡単で分かりやすく、実現しやすく、パラメータを推定する必要がなく、トレーニング2、欠点:怠惰アルゴリズム、テストサンプル分類時の計算量が大きく、メモリオーバヘッドが大きい.K値を指定しなければなりません.K値の選択が不適切であれば、分類精度は保証できません.3、使用シーン:小データシーン、数千~数万サンプル、具体的なシーンの具体的な業務はテストに行きます.
    シンプルなベキスト
    理論の基礎:
    ベ葉斯式:P(C≦W)=P(W≦C)P(C)P(W)P(C|W)=\fraac{P(W|C)P(C){P(W)P(C)P(W)P(W)P(W)P(C)P(C)注:Wは所与の文書の特徴値(予測文書)であり、予測文書の種類を提供します.
  • 式は3つの部分に分けられます.
  • P(C)P(C)P(C):各ドキュメントクラスの確率(文書クラスの語数/総文書の語数)
  • P(W|C)P(W|C)P(WŲC)所定のカテゴリにおける特徴(予測された文書に出てくる単語)の確率
  • 各カテゴリの事後確率を計算し、そのクラスとして選択確率が一番大きいです.
    計算方法:P(F 1の空飛ぶC)=N i/N P(Fuu 1の空飛ぶC)=N_i/N P(F 1ページC)=Ni/N(ドキュメント内で計算されます.N i Nui Niは、F 1 F_1 F 1ワードがCカテゴリのすべてのドキュメントに出現する回数です.Nは、所属カテゴリCにおけるドキュメント内のすべての単語の出現回数と、P(F 1,F 2,.)P(Fu1,F_2,...)P(F 1,F 2,)の予測ワードごとに.
    問題:いくつかのカテゴリの確率が0である場合があります.これは不合理です.単語リストの多くの出現回数が0である場合、計算結果はすべてゼロになります.解決方法:ラプラス平滑係数P(F 1 dB C)=N i+α N+α m P(F_1|C)=\fraac{Nuui+\alpha}{N+\alpha m}P(F 1咻C)=N+αmNi+αを選択しますα\アルファα指定された係数のために、通常は1として、mはトレーニングドキュメントに統計された特徴語の個数とします.
    slearnシンプルなベインズAPIを実現します.skylearn.naivebass.MultionomialNB
  • slearn.naivebass.MultiinomialNB(alpha=1.0)
  • シンプルなベインズ分類
  • α\アルファα:ラプラス平滑化係数
  • from sklearn.naive_bayes import MultinomialNB
    news = fetch_20newsgroups(subset='all') #      
    
    #        
    x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.25)
    
    #           
    tf = TfidfVectorizer()
    #                       
    x_train = tf.fit_transform(x_train)
    x_test = tf.transform(x_test)
    
    #             
    mlt = MultinomialNB(alpha=1.0)
    mlt.fit(x_train, y_train)
    
    y_predict = mlt.predict(x_test)
    mlt.score(x_test, y_test)
    
    アルゴリズム解析
  • 長所:
  • シンプルなベ葉斯モデルは古典数学理論に由来し、安定した分類効率があります.
  • は欠損データに対してあまり敏感ではありません.アルゴリズムも簡単です.テキスト分類でよく使われます.
  • 分類の精度が高く、速度が速いです.
  • 欠点:
  • は、先験的確率P(F 1,F 2,…C)P(F_1,Fu 2,…|C)P(F 1,F 2,…咻C)を知る必要があるので、ある時は仮説の先験的モデルの原因で予測効果が悪くなることがあります.
  • 正確率とリコール率
    正確率:予測結果は、サンプルの正例における真正例の割合(正確に調べられた)のリコール率である.実際に正例のサンプルで予測された結果は正例の割合である.
    分類モデル評価API:skylearn.metrics.classification
  • slearn.metrics.classiftication urport(yupled、target unames=None)
  • yuutrue:真の目標値
  • yupled:推定器予測目標値
  • target unames:目標カテゴリ名
  • return:各カテゴリの正確度とリコール率
  • from sklearn.metrics import classification_report
    print(classification_report(y_test, y_predict, target_names=news.target_names))
    
    クロス検証とグリッド検索
    クロス検証:評価されたモデルをより正確に信頼できるようにするために、クロス検証プロセス:入手したデータを訓練と検証セットに分けます.例えば、データを5つに分けて、その中の一つを検証セットとします.そして、5回(グループ)を経ます.のテストは、毎回異なる検証セットを交換します.すなわち、5組のモデルの結果を得て、平均値を最終結果とします.また、5割のクロス検証とも言います.グリッド検索:通常、多くのパラメータが手動で指定する必要があります.このような超パラメータは、手動プロセスが複雑なため、モデルにいくつかの超パラメータの組み合わせを設定する必要があります.各グループの超パラメータは相互検証を用いて評価します.最後に最適なパラメータを組み合わせてモデルを作成します.
    グリッド検索API:slearn.model ections.GridSearch CV
  • slearn.modelmuselections.GraidSearch CV(estimator,paramugrid=None,cv=None)
  • は、推定器の指定パラメータ値を詳細に検索する
  • .
  • estimator:推定対象
  • paramugrid:推定器パラメータ(dict){nineighbors}
  • cv:何割かのクロス検証を指定します.
  • fit:入力トレーニングデータ
  • score:精度
  • 結果分析:
  • ベストオブ:クロス検証における最高の結果
  • ベストモデル
  • cvursults_:毎回クロス検証後のテストセットの正確性結果とトレーニングセットの正確性結果
  • from sklearn.neighbors import KNeighborsClassifier
    from sklearn.model_selection import GridSearchCV
    knn = KNeighborsClassifier()
    
    #             
    param = {"n_neighbors": [3, 5, 10]}
    
    #       
    gc = GridSearchCV(knn, param_grid=param, cv=10)
    gc.fit(x_train, y_train)
    
    #      
    print("        :", gc.score(x_test, y_test))
    print("            :", gc.best_score_)
    print("        :", gc.best_estimator_)
    print("              :", gc.cv_results_)