Проблем с ЛАБ-а: резултатите, които се получават са зависими от средата
Здравейте,
Имам следния проблем с лаба към 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 виртуалка да сподели резултатите.
Интересува ме кои резултати са по-обективни и защо се получава разминаването.
Благодаря Данчо за коментара!
Някои от резултатити, които получавам са същите като твоите след като си настроя MKL променливата. Освен това резултатите са едни и същи всеки път. Но в зависимот от тази натройка резултатите могат да варират значително. В този случай обяснението за random seed-а не ми звучи задоволително.
Хм, май имаме по-интересен проблем, отколкото предполагах.
Първо, и със seed, и без, и с няколко различни стойности, при мен (на моя лаптоп) тестовете минават. Което пък е и някаква гаранция, че при автоматичното оценяване ще минат.
Второ, възможно ли е да четете данните от друго място, а не от файла; или пък да правите някоя операция, която аз не правя?
P. S.: Ако единствената разлика наистина е в настройките на чипа - аз имам една хипотеза. Познайте кои machine learning функции бяха най-сериозно засегнати от Meltdown: QR decomposition - основа на немалко линейни модели (source).
P. P. S.: Ако толкова се налага, ще направя проверката за +/- 0,05.
Относно четенето за на данните от друго място - едва ли е възможно. Пробвах с едни и същи данни в различни среди с един и същи код. В такъв случай дори да правя нещо по-различно - това няма значение.
Осносно лабовете не съм сигурен дали +/- 0,05 е добра идея ако само 2-ма човека сме забелязали такива аномалии. Видях, че е излязъл втория ЛАБ и ще тествам как върви с новите натройки. После ще споделя тук резултата.
Защо при seandi нито една от настройките не дава очаквания в теста резултат - честно казано нямам идея. Особено ако наистина работи с кода, който и аз тествам(най-отгоре). Успях да настроя 3 машини(2 физически и една виртуална) да минават тестовете, като резултатите са напълно съответстващи на очкваните от ЛАБ-а.
Интересна е идеята ти за Meltdown. Възможно е освен производителноста да има и модификации и в изчислителната схема или промяна в някои от сетовете от правила. Не разбирам нещата толкова на ниско ниво и не мога да дам мнение.
Здравей Данчо,
На твоя въпрос:
Възможно ли е да четете данните от друго място, а не от файла; или пък да правите някоя операция, която аз не правя?
Аз чета данните от папка data (от лаба) и изпълнявам всеки път един и същи код ( кода на dim4o) при различните стойности за MKL_CBWR.
... и аз получавам .902 на macOS и Ubuntu 17.10, без Intel MKL и двете.
Здравейте,
Последните резултати от моето изследване:
1. Файловете и резултатите са коректни. Не четете файла грешно: във всички източници е едно и също.
2. Нямаме нужда от seed - в лаба няма train / test split и всъщност - нищо друго, което да изисква случайни числа. Т. е. не е и от това.
3. Всички, които казвате, че при вас не работи - на моята машина дава коректни резултати. Окончателно: да, от средата е.
4. Meltdown поправките наистина водят до промени с floating-point arithmetic. За момента е най-вероятният източник на проблеми. Може да има значение дори операционната система, но за момента не мога да тествам. Аз съм на Windows 10 Education.
Най-лесното решение: просто не му обръщайте внимание :D. Всички тестове, които проверяват подобни неща в следващите лабове ще са скрити: т. е. при вас няма да се виждат и изпълняват, а на оценяващата машина ще работят.
Има и друго - разликите са малки, в действителност accuracy 0.899 и 0.902 са незначително различни. Въпросът е, че когато проверявам в тестовете, искам да се уверя, че сте избрали правилните данни - затова има тази проверка с delta = 0.001.
Аз съм изключително любопитен да задълбая повече, но наистина сякаш е някаква малка особеност на много ниско ниво (CPU).
Благодаря за коментара, Данчо!
@iordan_93,
Относно т. 3: Няма лесен начин да значеш, че на твоята машина са коректните резултати, а не на някоя от другите . Точно в това е проблема. Но така или иначе - в случая не можеш да направиш много.
Възможно е и Анакондата да не успява да създаде еднакви условия за всички среди. Без Анаконда при мен резултатите бяха различни. Хрумват ми още няколко неща, които могат да се пробват, но засега спирам да го мисля това и се съсредоточвам върху материалите от курса. При мен промяната на MKL параметрите даде желаният резултат.
@dim4o,
Както отбелязах, няма "коректни" резултати. Има резултати, които минават тестовете. Всеки един тест не гарантира, че нещо е коректно, но може да покаже, ако не е коректно. Въпросът беше, че тестовете минават.
Това с Anaconda-та ще го проуча и аз.
За мен вариантите са два: или формулата, която смята accuracy, или самата регресия - т. е. predict метода на LogisticRegression класа. По-вероятно първото. Аз ще се наложи да задълбая, защото трябва да избегна такива неща занапред.