• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Python - problem z importem biblioteki collections, pomimo jej braku

VPS Starter Arubacloud
0 głosów
212 wizyt
pytanie zadane 28 maja 2023 w Python przez wolfee_21 Nowicjusz (170 p.)

Witam

Mam kod z zajęć ze Sztucznej Inteligencji. Na zajęciach na komputerach z uczelni wszystko działało sprawnie. A teraz na moim prywatnym nie chce działać. Wyskakuje mi błąd:

"ImportError: cannot import name 'MutableSet' from 'collections'"

lub

"ImportError: cannot import name 'MutableMapping' from 'collections'"

Szukając w internecie rozwiązania dowiedziałam się, ze powinnam zmienić import collections na import collections.abc.

Problemem jest to, że w nie importuje tej biblioteki w kodzie

import numpy as np
from neupy import algorithms
import hickle as hkl
from sklearn.model_selection import StratifiedKFold
 
x,y_t,x_norm,x_n_s,y_t_s = hkl.load('iris.hkl')
y_t -= 1
x=x.T
y_t = np.squeeze(y_t)
lvqnet = algorithms.LVQ(n_inputs=x.shape[0], n_classes=np.unique(y_t).shape[0],step=0.001)
#lvqnet = algorithms.LVQ2(n_inputs=x.shape[0], n_classes=np.unique(y_t).shape[0],step=0.001)
# lvqnet = algorithms.LVQ21(n_inputs=x.shape[0], n_classes=np.unique(y_t).shape[0],step=0.001)
# http://neupy.com/modules/generated/neupy.algorithms.LVQ3.html
# lvqnet = algorithms.LVQ3(n_inputs=x.shape[0], n_classes=np.unique(y_t).shape[0],step=0.001)
lvqnet.train(x, y_t, epochs=100)
y=lvqnet.predict(x)
e = y_t - y
PK = (1 - sum(abs(e)>=0.5)/e.shape[0] ) * 100
print("\nPK = %5d" % PK)
 
data = x
target = y_t
 
CVN = 10
skfold = StratifiedKFold(n_splits=CVN)
PK_vec = np.zeros(CVN)
 
for i, (train, test) in enumerate(skfold.split(data, target), start=0):
    x_train, x_test = data[train], data[test]
    y_train, y_test = target[train], target[test]
    # print(i,train,test)
    lvqnet = algorithms.LVQ(n_inputs=x_train.shape[1], n_classes=np.unique(y_train).shape[0],step=0.001)
    #lvqnet = algorithms.LVQ2(n_inputs=x.shape[1], n_classes=np.unique(y_t).shape[0],step=0.001)
    # lvqnet = algorithms.LVQ21(n_inputs=x.shape[1], n_classes=np.unique(y_t).shape[0],step=0.001)
    # http://neupy.com/modules/generated/neupy.algorithms.LVQ3.html
    # lvqnet = algorithms.LVQ3(n_inputs=x.shape[1], n_classes=np.unique(y_t).shape[0],step=0.001)
    lvqnet.train(x_train, y_train, epochs=100)
    result = lvqnet.predict(x_test)
 
    n_test_samples = test.size
    PK_vec[i] = np.sum(result == y_test) / n_test_samples
     
    print("Test #{:<2}: PK_vec {} test_size {}".format(i, PK_vec[i], n_test_samples))
 
PK = np.mean(PK_vec)
print("PK {}".format(PK))

 

Z góry dziękuję za pomoc.

1 odpowiedź

+1 głos
odpowiedź 28 maja 2023 przez adrian17 Ekspert (344,100 p.)

Ten kod jest po prostu przestarzały.

Nawet w tym co wrzuciłaś:

from neupy import algorithms

Na githubie biblioteki numpy widać że nie była aktualizowana od lat, plus na samej górze jest napisane:

The library is no longer being actively maintained, please consider this before using it for your project

W każdym razie, domyślam się że któraś z pośrednich zależności jednej z tych starych bibliotek importuje MutableSet "po staremu". Musisz spojrzeć w pełny traceback żeby zobaczyć która. Ale łatwo w zależnej bibliotece tego nie naprawisz.

Jeśli koniecznie musisz używać ten stary kod, to jedyną sensowną opcją jest zainstalowanie starego Pythona. (plus, poinformuj profesora że ten kod jest na śmietnik :/ )

komentarz 28 maja 2023 przez wolfee_21 Nowicjusz (170 p.)
A jak i czy w ogóle można zmienić wersję pythona tak, żebym w Spyderze miała np. Python 3.8?

Podobne pytania

0 głosów
0 odpowiedzi 284 wizyt
pytanie zadane 1 lipca 2019 w Python przez Ventre90 Obywatel (1,170 p.)
0 głosów
1 odpowiedź 203 wizyt
0 głosów
0 odpowiedzi 207 wizyt
pytanie zadane 31 lipca 2021 w Python przez HGH Początkujący (430 p.)

92,454 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...