

いくつかのプログラミング勉強サイトで似たような問題があったので一つ例にあげて質問させていただきます。Pythonで機械学習の本（python
機械学習プログラミング）で勉強するなかで以下のサンプルコードをコピペして実行したのですが出力が異なりMisclassified
samplesの数が模範解答では4になっているのに対し私は9と出力されました。他の人にも同じコードを入力してもらったのですが私だけ答えが異なりました。random値の違いかと思いましたが他の原因かもしれません。原因に心当たりがありましたら教えていただきたいです。

pythonのバージョンは3.5.6です

サンプルコード

[code]

    import numpy as np
    from sklearn import datasets
    from sklearn.preprocessing import StandardScaler
    from sklearn.metrics import accuracy_score
    from sklearn.linear_model import LogisticRegression
    from sklearn.linear_model import Perceptron
    import matplotlib.pyplot as plt
    
    
    # for sklearn 0.18's alternative syntax
    from distutils.version import LooseVersion as Version
    from sklearn import __version__ as sklearn_version
    if Version(sklearn_version) < '0.18':
        from sklearn.grid_search import train_test_split
    else:
        from sklearn.model_selection import train_test_split
    
    iris = datasets.load_iris()
    X = iris.data[:, [2, 3]]
    y = iris.target
    print('Class labels:', np.unique(y))
    
    X_train, X_test, y_train, y_test = train_test_split(
        X, y, test_size=0.3, random_state=0)
    
    sc = StandardScaler()
    sc.fit(X_train)
    X_train_std = sc.transform(X_train)
    X_test_std = sc.transform(X_test)
    
    ppn = Perceptron(n_iter=40, eta0=0.1, random_state=0)
    ppn.fit(X_train_std, y_train)
    print('Y array shape', y_test.shape)
    
    y_pred = ppn.predict(X_test_std)
    print('Misclassified samples: %d' % (y_test != y_pred).sum())
    
[/code]


CC BY-SA 4.0
2019-04-22T10:57:15.830
54396
2019-04-22T15:11:19.900
2019-04-22T15:11:19.900
3060
33030
question
python python3 機械学習
random値の違い


scikit-learnのバージョンによる違いだと思います。私の環境で確認したところ、バージョン0.18では`4`で、

[code]

    $ pip install scikit-learn==0.18
    Collecting scikit-learn==0.18
      Downloading https://files.pythonhosted.org/packages/e9/fc/d923732ac9ddee7eb883d94dd3d127425280c9986ef47bae8656db34fe9f/scikit_learn-0.18-cp35-cp35m-manylinux1_x86_64.whl (11.3MB)
        100% |████████████████████████████████| 11.3MB 1.0MB/s 
    Installing collected packages: scikit-learn
    Successfully installed scikit-learn-0.18
    $ python3 test.py 
    Class labels: [0 1 2]
    Y array shape (45,)
    Misclassified samples: 4
    
[/code]

バージョン0.20では`9`でした。

[code]

    $ pip uninstall scikit-learn
    Uninstalling scikit-learn-0.18:
      Would remove:
        /home/tamura/tododel/venv/lib/python3.5/site-packages/scikit_learn-0.18.dist-info/*
        /home/tamura/tododel/venv/lib/python3.5/site-packages/sklearn/*
    Proceed (y/n)? y
      Successfully uninstalled scikit-learn-0.18
    $ pip install scikit-learn==0.20
    Collecting scikit-learn==0.20
      Using cached https://files.pythonhosted.org/packages/dc/8f/416ccf81408cd8ea84be2a38efe34cc885966c4b6edbe705d2642e22d208/scikit_learn-0.20.0-cp35-cp35m-manylinux1_x86_64.whl
    Requirement already satisfied: numpy>=1.8.2 in ./venv/lib/python3.5/site-packages (from scikit-learn==0.20) (1.16.3)
    Requirement already satisfied: scipy>=0.13.3 in ./venv/lib/python3.5/site-packages (from scikit-learn==0.20) (1.2.1)
    Installing collected packages: scikit-learn
    Successfully installed scikit-learn-0.20.0
    $ python3 test.py 
    Class labels: [0 1 2]
    /home/tamura/tododel/venv/lib/python3.5/site-packages/sklearn/linear_model/stochastic_gradient.py:130: DeprecationWarning: n_iter parameter is deprecated in 0.19 and will be removed in 0.21. Use max_iter and tol instead.
      DeprecationWarning)
    Y array shape (45,)
    Misclassified samples: 9
    
[/code]


CC BY-SA 4.0
2019-04-22T13:41:07.490
54400
2019-04-22T13:47:23.540
2019-04-22T13:47:23.540
21092
21092
54396
answer