Професионална програма
Loading...
+ Нов въпрос
dim4o avatar dim4o 289 Точки

Проблем с ЛАБ-а: резултатите, които се получават са зависими от средата

Здравейте,

Имам следния проблем с лаба към Linear and Logistic Regression. Лаба е лесен, но следния assert не минаваше:

assert_almost_equal(accuracy_score_quad, 0.8986949789869498, delta = 0.001)

Работя в Linux среда без Anaconda, като си инсталирам всичко, което ми трябва точно когато ми трябва. Реших, че това може да е проблем и затова пробвах под Windows с инсталация на Anaconda. Като резултат всички assert-и от лаба си минаваха както се очаква. Върнах се Linux средата (Ubuntu) премахнах всички инсталирани покрай курса пакети и си сложих Anaconda и си настроих всичко по най-стандартния начин. Въпреки това assert-a пак не минаваше. Пробвах още няколко неща, даже си вдигнах една виртуална Ubuntu машина и инсталирах всичко отначало и отново нямаше резултат. Пробвах и онлайн инструменти, т.е. трета (даже четвърта ако броим виртуалката) среда и там имаше различен резултат, но пак е около ~0.904. Само под Windows среда се получава ~0.899. По-долу съм извадил есенцията на проблема, като в коментарите съм написал резултатите в съответните среди:

import numpy as np
import pandas as pd

from nose.tools import *

from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import PolynomialFeatures

bank_data = pd.read_csv('./data/bank.csv', sep=";")
bank_features = bank_data.drop('y', axis=1)
bank_features = pd.get_dummies(bank_features)
bank_output = bank_data.loc[:,'y']

quad_feature_transformer = PolynomialFeatures(degree=2, interaction_only=True)
bank_features_quad = quad_feature_transformer.fit_transform(bank_features)

bank_model_quad = LogisticRegression(C=1e6)
bank_model_quad.fit(bank_features_quad, bank_output)
accuracy_score_quad = bank_model_quad.score(bank_features_quad, bank_output)

print("Accuracy: {}".format(accuracy_score_quad)) 
# Ubuntu output:          0.9028975890289759
# Ubuntu VM output:       0.90400353904
# http://jupyter.org/try: 0.9037823490378235
# Windows output:         0.89869497895

assert_almost_equal(accuracy_score_quad, 0.8986949789869498, delta = 0.001)

Ще съм благодарен ако някой ми даде идея защо се получават тези разминавания или работи под Linux или пробва ЛАБ-а на Ubuntu виртуалка да сподели резултатите.

Интересува ме кои резултати са по-обективни и защо се получава разминаването.

Тагове:
1
Machine Learning 12/03/2018 20:44:30
seandi avatar seandi 38 Точки

Здравей,

На мен под Windows се получава:  0.90157044901570449

1
dim4o avatar dim4o 289 Точки

Да, това също не влиза в делтата и assert-а гърми. Благодаря за споделения резултат. До тук като гледам няма 2 среди да дават еднакъв резултат, което дори да е нормално все пак не е ок. Тази делта може би трябва да се увеличи.

Проблемът тук е, че по този начин не се демонстрира това, че при овърфит score може да падне.

0
12/03/2018 20:56:45
dim4o avatar dim4o 289 Точки

Можеш да пробваш да сетнеш MKL_CBWR=AUTO и да провериш дали резлутатът е консистентен с този от лектора.

0
seandi avatar seandi 38 Точки

Сетнах тази променлива при променливите в Windows, но резултатът пак не съвпада.

1
dim4o avatar dim4o 289 Точки

Натъкнах се на нещо, което е доста вероятно решение на проблема. Довечера ще пробвам на Ubuntu машината дали решението работи. Засега съм го тествал на Windows машина, като успях да репродуцирам проблема и да го фиксна после.

Най-вероятно описаното от мен по-горе поведение е заради MKL(Math Kernel Library) на Intel. Възможно е например numpy или scipy да изполват или да са компилирани с тази библиотека. Тя използва floating-point matrix multiplication операции, които не са детермистични по подразбиране. За да се избегне това трябва да се сетне глобалната променлива MKL_CBWR=AUTO, която отговаря за репродуцирането на резултатите. Различните стойности и как се сетва може да се види тук: https://software.intel.com/en-us/mkl-linux-developer-guide-setting-the-environment-variable-for-conditional-numerical-reproducibility

0
dim4o avatar dim4o 289 Точки

Изредих и сетнах всички стойности от тук: https://software.intel.com/en-us/mkl-macos-developer-guide-specifying-code-branches

При мен проработи MKL_CBWR=SSE4_2. При вас може да е различна променлива. Ако нищо от тях не мине - пишете. Ще го мислим. 

Поне сега резлултатите ми съответсват с тези на лектора. Незнам до колко това е ОК. Независимо кой резултат е по-точен, според мен най-важното е да работим по еднакъв стандарт. Иначе е безсмислено.

0
seandi avatar seandi 38 Точки

Благодаря! Утре ще пиша за резултата.

0
seandi avatar seandi 38 Точки

С MKL_CBWR=SSE4_2 не проработи.

0
15/03/2018 10:19:47
DSarafov avatar DSarafov 0 Точки

Здравейте dim4о, seandi,

За мен вариантите са 3:

1. Ние грешим някъде в нашият код: Малко вероятно, защото е прост, но не е невъзможно. В този случай стеване на парамери така, че при нас локално да тръгне няма да помогнат - досещате се...

2. Лаб-а е грешен: тук сме безсилни общ взето, трябва да убедим Лекора.

3. Имаме проблем с environment настройка: В този случай не е притеснителен защото ако при Лектора настройката е ОК, то оценяването ни при него ще мине.

Мен лично ме приеснява 1 все още.

Въпреки това, са доста интересни разкритията на dim4o и никак не е зле да се огармотим за правилните параметри преди да започмен да предоставяме резултати към клиенти :)

 

 

0
iordan_93 avatar iordan_93 Trainer 407 Точки

Здравейте,

Проблемът е от т. нар. reproducibility: не можете да получите същите резултати, защото нямате същите условия. В случая, това е seed-a на random generator-a. От него зависят много неща, в това число как ще се раздели dataset-a на training и testing.

При оценяване, съм фиксирал np.random.seed(1000) и е гарантирано, че при мен ще работи.

Ъпдейтвам файловете на лаба с тази корекция. Не е нужно да ъпдейтвате вашите файлове, но ако имате желание - направете го.

1
seandi avatar seandi 38 Точки

Благодаря Данчо за коментара!

0
dim4o avatar dim4o 289 Точки

Някои от резултатити, които получавам са същите като твоите след като си настроя MKL променливата. Освен това резултатите са едни и същи всеки път. Но в зависимот от тази натройка резултатите могат да варират значително. В този случай обяснението за random seed-а не ми звучи задоволително.

0
iordan_93 avatar iordan_93 Trainer 407 Точки

Хм, май имаме по-интересен проблем, отколкото предполагах.

Първо, и със seed, и без, и с няколко различни стойности, при мен (на моя лаптоп) тестовете минават. Което пък е и някаква гаранция, че при автоматичното оценяване ще минат.

Второ, възможно ли е да четете данните от друго място, а не от файла; или пък да правите някоя операция, която аз не правя?

P. S.: Ако единствената разлика наистина е в настройките на чипа - аз имам една хипотеза. Познайте кои machine learning функции бяха най-сериозно засегнати от Meltdown: QR decomposition - основа на немалко линейни модели (source).

P. P. S.: Ако толкова се налага, ще направя проверката за +/- 0,05.

2
16/03/2018 00:36:11