

Pythonによる機械学習入門を読み進んでいるところで困っています。  
P119 6.2.2学習の実施で  
trial_handsign_SVM.py を実行したところ以下のエラーメッセージが発生しました。  
スクリプトを以下のように実行する。

[code]

    ＞＞＞run trial_handsign_SVM.py ./data/my_learn8/ ./data/my_test2/
    
[/code]

`Syntax Error : invalid syntax` と表示されましたが、これはコマンドプロンプトの場合です。ちなみに、`python
Spyder` でコードをそのまま実行させた時のエラーは `Index Error:list index out of range`
と表示されました。解決するためには、コードはどのようにすればよいのでしょうか？また、2つのエラーの違いはあるの‌​でしょうか。厚かましいお願いではございま‌​すが、よろしくお願いします。

コードは以下の通りです。

[code]

    # -*- coding: utf-8 -*- 
    import os
    import sys
    import glob
    import numpy as np
    from skimage import io
    from sklearn import datasets
    
    IMAGE_SIZE = 40
    COLOR_BYTE = 3
    CATEGORY_NUM = 6
    
    ## ラベル名(0～)を付けたディレクトリに分類されたイメージファイルを読み込む
    ## 入力パスはラベル名の上位のディレクトリ
    def load_handimage(path):
    
        # ファイル一覧を取得
        files = glob.glob(os.path.join(path, '*/*.png'))
    
        # イメージとラベル領域を確保
        images = np.ndarray((len(files), IMAGE_SIZE, IMAGE_SIZE,
                                COLOR_BYTE), dtype = np.uint8)
        labels = np.ndarray(len(files), dtype=np.int)
    
        # イメージとラベルを読み込み
        for idx, file in enumerate(files):
           # イメージ読み込み
           image = io.imread(file)
           images[idx] = image
    
           # ディレクトリ名よりラベルを取得
           label = os.path.split(os.path.dirname(file))[-1]
           labels[idx] = int(label)
    
        # scikit-learn の他のデータセットの形式に合わせる
        flat_data = images.reshape((-1, IMAGE_SIZE * IMAGE_SIZE * COLOR_BYTE))
        images = flat_data.view()
        return datasets.base.Bunch(data=flat_data,
                     target=labels.astype(np.int),
                     target_names=np.arange(CATEGORY_NUM),
                     images=images,
                     DESCR=None)
    
[/code]

* * *
[code]

    from sklearn import svm, metrics
    
    ## 学習データのディレクトリ、テストデータのディレクトリを指定する
    if __name__ == '__main__':
        argvs  = sys.argv
        train_path = argvs[1]
        test_path = argvs[2]
    
        # 学習データの読み込み
        train = load_handimage(train_path)
    
        # 手法:線形SVM
        classifier = svm.LinearSVC()
    
        # 学習
        classifier.fit(train.data, train.target)
    
        # テストデータの読み込み
        test = load_handimage(test_path)
    
        # テスト
        predicted = classifier.predict(test.data)
    
        # 結果表示
        print("Accuracy:\n%s" % metrics.accuracy_score(test.target, predicted))
    
[/code]


CC BY-SA 3.0
2017-10-19T15:26:21.730
38875
2019-01-29T17:04:30.940
2017-10-21T14:39:34.250
19110
25839
question
python python3
SVMのコードを動かすとシンタックスエラーや index out of range エラーが出る


コードのほうが間違っているのかと思い  
こちらからダウンロードして自分の環境で実行してみましたが特に問題なく動作することは確認できました。  
<http://www.ohmsha.co.jp/data/link/978-4-274-21963-4/>

[code]

    $ python trial_handsign_SVM.py ./data/my_learn8/ ./data/my_test2/
    Accuracy:
    0.916666666667
    
[/code]

* * *

> また、２つのエラーの違いはあるの‌​でしょうか。

質問者様の質問にあります2点のエラーについて

[code]

    Index　Error:list index out of range
    
[/code]

リスト内の存在しない要素にアクセスされた場合このエラーを吐きます。

[code]

    Syntax Error : invalid syntax 
    
[/code]

pythonの文法エラーです。

* * *

> 解決するためには、コードはどのようにすればよいのでしょうか？

上記でも書きました通り、コードのほうに問題はありません。

コード実行時に発生したエラーをもう少し詳細に教えていただければこちらも問題の解決をお手伝いできると思います。  
例えば下のような感じにエラーの内容を貼り付けてもらえると助かります。

[code]

    $ python trial_handsign_SVM.py ./data/my_learn8/
    Traceback (most recent call last):
    File "trial_handsign_SVM.py", line 51, in <module>
    test_path = argvs[2]
    IndexError: list index out of range
    
[/code]


CC BY-SA 3.0
2017-10-21T12:53:57.303
38937
2017-10-21T14:33:57.313
2017-10-21T14:33:57.313
19110
25868
38875
answer