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

pythonのバージョンは3.5.6です

サンプルコード

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())