В моем ноутбуке Jupyter я продолжаю получать новые числа, несмотря на использование одного и того же случайного начального числа - PullRequest
0 голосов
/ 22 октября 2018

Я проверяю, как различные формы предварительной обработки могут повлиять на точность моей модели.Я написал следующий фрагмент кода, который по сути является функцией, которая возвращает уровень точности модели.

import pandas as pd
from sklearn import datasets
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import tree
from sklearn.datasets import load_iris

def get_acc(data, target):
    # Splits the data randomly
    data_train, data_test, target_train, target_test = train_test_split(
        data, target, test_size=0.3, random_state=3)
    classifier = tree.DecisionTreeClassifier()

    # Calls the function to train the data then creates predictions
    model = classifier.fit(data_train, target_train)
    targets_predicted = model.predict(data_test)

    # Print percentage correctly guessed
    error = 1.0 - np.mean( target_test != targets_predicted )
    # print(error)
    return error

iris = load_iris()
print(get_acc(iris.data, iris.target))
print(get_acc(iris.data, iris.target))

Проблема в том, что я подаю один и тот же набор данных дважды, и все же я получаю выходные данные с различной точностью:

Вывод:

0.9555555555555556
0.9111111111111111

Что дает?Я ожидаю, что они будут такими же, потому что я установил random_state=3 в своей функции train_test_split.Другими словами, я думаю, что я использую то же самое семя.Поскольку они возвращают разные уровни точности, я предполагаю, что моя модель каждый раз получает разные данные разделения.Я хотел бы, чтобы данные разделения были одинаковыми оба раза.

1 Ответ

0 голосов
/ 22 октября 2018

tree.DecisionTreeClassifier() также имеет случайное состояние, попробуйте передать ему семя, подобное random_state=3.Все его аргументы можно найти здесь

...