Dalam artikel ini, saya akan menunjukkan kepada Anda contoh bagaimana tidak memperhatikan kode dapat menyebabkan hasil yang salah dalam penambangan data.
Ada satu kursus hebat [1] tempat siswa belajar melakukan penelitian pembelajaran mesin. Pada akhir semester, mahasiswa menyiapkan artikel. Dalam perkuliahan, mereka secara bersamaan diberitahu bagaimana melakukannya. Biasanya, menyiapkan artikel melibatkan melakukan percobaan dengan data. Berdasarkan hasil semester, beberapa makalah sudah siap untuk dimasukkan ke jurnal.
Jadi, dalam proyek MLDev, kami membantu membuat repositori templat untuk siswa kursus ini. Template seperti itu, atau dengan kata lain, template, akan memungkinkan Anda untuk mulai mengerjakan artikel lebih cepat dan lebih sedikit mempelajari berbagai alat yang diperlukan.
Saat saya melihat-lihat karya untuk musim semi tahun 2020, saya tertarik pada grafik yang tidak biasa dalam karya "Analisis properti ansambel model yang mendekati lokal" [2]. Grafik dengan hasil percobaan dengan jelas menunjukkan kesenjangan nilai ketergantungan yang disajikan. Tetapi berdasarkan pilihan data awal dan sifat ketergantungan ini, seharusnya tidak ada celah di tempat ini.
Sangat menarik untuk memeriksa mengapa hasil yang tidak terduga diperoleh dalam pekerjaan itu.
Mengulangi percobaan
, . , , . . , .
, , . , . .
. , , [2]. . .
Google Colab . MixtureLib
GitHub [3]. MixtureLib
. . , .
!git clone https://github.com/andriygav/MixtureLib.git
!python3 -m pip install MixtureLib/src/.
from mixturelib.localmodels import EachModelLinear
from mixturelib.hypermodels import HyperExpertNN, HyperModelDirichlet
from mixturelib.mixture import MixtureEM
. , .
correlations = []
sigmas = [0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,
1.0,0.03,0.04,0.05,0.06,0.07,0.08,0.09,
0.15,0.25,0.35,0.45,0.55,0.65,0.75,0.85,
0.95,0.11,0.12,0.13,0.14,0.15,0.22,0.27,
0.32,0.37,0.42,0.47,0.52,0.57,0.62,0.67,
0.72,0.77,0.82,0.87,0.92,0.97]
, EachModelLinear
, . . MixtureEM
HyperNetEM
, . , . , .
torch.random.manualseed(42)
first_model = EachModelLinear(input_dim=2)
second_model = EachModelLinear(input_dim=2)
list_of_models = [firstmodel, second_model]
HpMd = HyperExpertNN(inputdim=2, hiddendim=5,outputdim=2, epochs=1000)
mixture = MixtureEM(HyperParameters={'beta': 1.},
HyperModel=HpMd,
ListOfModels=listofmodels,
modeltype='sample')
. .
for i, sigma in enumerate(sigmas):
#
x1 = np.random.normal(0, 1, (200, 1))
x2 = np.random.normal(0, 1, (200, 1))
y1 = np.array([f1(x) for x in x1])
y2 = np.array([f2(x) for x in x2])
s1 = np.random.normal(0, sigma, 200).reshape((200, 1))
s2 = np.random.normal(0, sigma, 200).reshape((200, 1))
X1 = np.hstack([x1, s1])
X2 = np.hstack([s2, x2])
X = np.vstack([X1, X2])
Y = np.hstack([y1, y2])
realsecondw = np.array([[10.], [0.]])
realfirstw = np.array([[0.], [50.]])
Xtr = torch.FloatTensor(X)
Ytr = torch.FloatTensor(Y).view([-1,1])
#
# β¦
for i, sigma in enumerate(sigmas):
#
# ...
#
torch.random.manual_seed(42)
mixture.fit(X_tr, Y_tr)
predicted_first_w = mixture.ListOfModels[0].W.numpy()
predicted_second_w = mixture.ListOfModels[1].W.numpy()
weights = []
weights.append([predicted_first_w[0][0], predicted_first_w[1][0]])
weights.append([predicted_second_w[0][0], predicted_second_w[1][0]])
# ,
Y1 = X.dot(weights[0])
Y2 = X.dot(weights[1])
correlations.append(cor_Pearson(Y1, Y2))
, . , . , . , , . , .
, , . . , .
. , , , . , , , . , .
fit()
MixtureEM
. , , . . .
? fit()
. MixtureLib
, fit()
. .
, fit()
fit()
scikit-learn
, . partial_fit()
(. ).
, , . . , .
, . fit()
.
, .
, , . , .
, . , .
. , , ?
, , . , .
, .
[1] β β, - https://m1p.org
[2] - https://github.com/Intelligent-Systems-Phystech/2020_Project-51
[3] MixtureLib
- https://github.com/andriygav/MixtureLib
[4] - https://colab.research.google.com/drive/1DZoJN32EpTZVSi2N3BduRCRf-ZST8snP#scrollTo=1JopTLX4eMnX
PS Tentu saja, kami menghubungi dan mendiskusikan apa yang kami temukan dengan penulis artikel dan perpustakaan MixtureLib
. Kesalahan telah dikonfirmasi. Artikel tersebut dibuat pada bulan Maret, jadi pada bulan Desember sudah sulit untuk merekonstruksi bagaimana grafik asli diperoleh dan bagaimana eksperimen dilakukan. Kemudian orang bertanya-tanya apakah percobaan dilakukan dalam beberapa bagian. Apalagi jika Anda memperhatikan kekurangan grafik di notebook asli dan daftar sigma ini:
sigmas = [0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,
1.0,0.03,0.04,0.05,0.06,0.07,0.08,0.09,
0.15,0.25,0.35,0.45,0.55,0.65,0.75,0.85,
0.95,0.11,0.12,0.13,0.14,0.15,0.22,0.27,
0.32,0.37,0.42,0.47,0.52,0.57,0.62,0.67,
0.72,0.77,0.82,0.87,0.92,0.97]