2017-08-01 9 views
1

人は私がプログラムで経験している問題をメールで送ってきたとしましょう。これらの電子メールを各電子メールで使用されている単語に基づいて「問題タイプ」クラスに分類するようにマシンに教えます。各メール Wordデータを処理してScikit-LearnのSVCアルゴリズムに入力する

  • 各電子メールは
  • 私は「

    Here is an image showing the two CSV files

    として標識されるクラスの

    • ワードの内容:

      私はそれぞれ含む2つのCSVファイルを作成しましたこれらのデータをPython 3のScikit-LearnのSVCアルゴリズムに入力しようとしています。しかし、私が知る限り、電子メールの内容を持つCSVファイルはb eはSVCに直接渡されます。それは浮きだけを受け入れるようです。私はこれを実行すると

      import pandas as pd 
      import os 
      from sklearn import svm 
      from pandas import DataFrame 
      
      
      data_file = "data.csv" 
      data_df = pd.read_csv(data_file, encoding='ISO-8859-1') 
      
      classes_file = "classes.csv" 
      classes_df = pd.read_csv(classes_file, encoding='ISO-8859-1') 
      
      
      X = data_df.values[:-1] #training data 
      y = classes_df.values[:-1] #training labels 
          #The SVM classifier requires the specific variables X and y 
           #an array X of size [n_samples, n_features] holding the training samples, 
           #and an array y of class labels (strings or integers), size [n_samples] 
      
      clf = svm.SVC(gamma=0.001, C=100) 
      clf.fit(X, y) 
      

      が、私はの内容に続いて、「フロートする文字列を変換できませんでした」述べ、最後の行に「とValueError」を受信:

      は、私は次のコードを実行してみてください"data.csv"ファイルの最初の電子メール。これらの電子メールコンテンツをSVCアルゴリズムに供給するためにフロートに変換する必要がありますか?もしそうなら、私はそれをどうやってやりますか?

      私はhttp://scikit-learn.org/stable/datasets/index.html#external-datasetsで読んでいたのだが、その後、データの前処理に関するそれぞれの文書に私をリード

      Categorical (or nominal) features stored as strings (common in pandas DataFrames) will need converting to integers, and integer categorical variables may be best exploited when encoded as one-hot variables

      を述べたが、私は次の行くところへと失われたビットになった怖いです。 SVCアルゴリズムで動作するためには、電子メールの内容をどうすればいいのかよく分かりません。

      この問題にどのように対処するかについては、誰でも洞察できますよう、感謝します。

    +0

    をはい、SVCを使用することが可能であるが、まず、あなたのデータを変換する必要があります。私の答えを参照してください – sera

    答えて

    0

    はい、カテゴリの機能をエンコードし、SVCに使用する必要があります。

    data_dfの機能にはDictVectorizerを使用し、classes_dfにはLabelEncoderを使用できます。 https://www.dropbox.com/sh/kne5wopgzeuah0u/AABKTuc3_1czzI0hIpZWPkLwa?dl=0

    を以下あなたの正確な同じデータを使用して正常に動作します:

    import pandas as pd 
    from sklearn.feature_extraction import DictVectorizer 
    from sklearn import preprocessing 
    from sklearn import svm 
    
    data_file = "data.csv" 
    data_df = pd.read_csv(data_file, encoding='ISO-8859-1') 
    
    classes_file = "classes.csv" 
    classes_df = pd.read_csv(classes_file, encoding='ISO-8859-1') 
    
    # label encoding 
    lab_enc = preprocessing.LabelEncoder() 
    labels_new = lab_enc.fit_transform(classes_df) 
    
    # vectorize training data 
    train_as_dicts = [dict(r.iteritems()) for _, r in data_df.iterrows()] 
    train_new = DictVectorizer(sparse=False).fit_transform(train_as_dicts) 
    
    clf = svm.SVC(gamma=0.001, C=100) 
    clf.fit(train_new, labels_new) 
    

    これは正常に動作します

    これは私が使用したサンプルデータがあります。

    希望これは私がdata.csvにおける機能として、インターネット上にある次のテキストを使用

    EDIT

    に役立ちます。

    [説明]列の最初の要素は次のとおりです。

    最初のレポートの直後に、最初のステートメントが誤解を招くようになったことが示されました。タイムズ紙によると、トランプ・ジュニアは、ヒラリー・クリントンに関する有害な情報をもたらすことを期待して会議を受け入れ、トランプ・ジュニアはそれがないと述べた。ロン・ゴールドストーン氏は知り合いの電子メール・チェーンを取得した後、Trump Jr.に父のキャンペーンを支援するロシア政府の取り組みの一環として情報を入手できる会議を提出した。トランプ・ジュニア氏は電子メールをオンラインで投稿した。最初の報告書、それは最初の声明が誤解を招くことが示された。タイムズ紙によると、トランプ・ジュニアは、ヒラリー・クリントンに関する有害な情報をもたらすことを期待して会議を受け入れ、トランプ・ジュニアはそれがないと述べた。ロブ・ゴールドストーン氏は知り合いの電子メール・チェーンを取得した後、Trump Jr.に父のキャンペーンを支援するロシア政府の取り組みの一環として情報を入手できる会議を提出し、Trump Jr.氏はEメールをオンラインで投稿した。

    長は次のとおりです。

    len(data_df['Description'][0]) 
    
    982 
    

    コードは再びうまく働きました。

    EDIT 2

    私が使用しています:

    sklearn.__version__ 
    '0.18.2' 
    
    pandas.__version__ 
    u'0.20.3' 
    
    +0

    迅速な応答ありがとう! このコードを実行すると、 "ValueError:入力にNaN、無限大またはdtype( 'float64')には大きすぎる値が含まれています。 メールの内容がかなり長くなる可能性があるため、値が大きすぎると思われます。私はこの問題がどのようなものであるかを正確に診断するためにどうすればいいのか分かりません。 – Rudy

    +0

    まず、あなたが使用しているパンダとsklearnのバージョンを教えてください。また、問題がある可能性がある非常に長い文字列がある場合は、そうです。このコードで使用したサンプルデータを見るためのリンクを追加しました。すべてのデータをアップロードできますか? – sera

    +1

    sklearnバージョン0.18.1およびパンダバージョン0.20.1。 残念ながら、機密情報が含まれているため、すべてのデータをアップロードすることはできません。私は私のデータセットを、最初の10サンプルに短縮し、電子メールの内容を短縮しました。 site-packages \ sklearn \ preprocessing \ label.py:129:DataConversionWarning:1d配列が予想されたときに列ベクトルyが渡されました。 yの形状を(n_samples、)に変更してください。たとえば、ravel()を使用してください。 y = column_or_1d(y、warn = True) – Rudy

    関連する問題