Loading...
dim4o avatar dim4o 288 Точки

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

Здравейте,

Имам следния проблем с лаба към 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 288 Точки

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

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

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

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

0
seandi avatar seandi 38 Точки

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

1
dim4o avatar dim4o 288 Точки

Натъкнах се на нещо, което е доста вероятно решение на проблема. Довечера ще пробвам на 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 288 Точки

Изредих и сетнах всички стойности от тук: 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 288 Точки

Някои от резултатити, които получавам са същите като твоите след като си настроя 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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.