Gondolkozott már azon, hogy miért kell példányosítania modelljét a Scikit-learn gépi tanulási csomag használatakor?

R-háttérrel rendelkező biostatisztikusként, amikor elkezdtem tanulni a Python és a gépi tanulási modellek oktatóanyagaiból, volt egy vonal, amit nem értettem teljesen.

Tudja, melyik?

Például, ha lineáris regressziós modellt akarunk használni, miért írjuk a következőket:

from sklearn.linear_model import LinearRegression

regr = LinearRegression() #this line!

majd illeszkedjen a modellhez,

regr.fit(X_train, y_train) #why this syntax?

akkor jósolj meg:

y_pred = regr.predict(X_test) #and this syntax?

Az általam elvégzett Python gépi tanulási kurzusokon ezeket a parancssorokat sokkal több magyarázat nélkül kellett futtatnunk, mint „a modell példányosítását”.

Kiderült, hogy a Scikit-learn Object-Oriented Programming (OOP) segítségével készült. Úgy döntöttem, hogy többet megtudok ezeknek a csomagoknak a működéséről, és kifejlesztem az első Python-csomagomat az OOP használatával.

Miközben az első Python csomagom ötletein gondolkodtam, már valami szuper kifinomult és egyedit képzeltem el. Mégis, ez az ELSŐ csomagom, így magammal való ötletelés után úgy döntöttem, valami egyszerű csomag mellett döntök, amire később építhetek.

Hadd mutassam meg, hogyan hoztam létre egy csomagot az alapvető összesítő statisztikák kiszámításához egy számlistából.

1. Hozzon létre egy függvényt tartalmazó osztályt

Az OOP-ban létrehozunk egy osztályobjektumot, belül pedig függvényeket adhatunk hozzá.

class Continuous(SummaryStatistics): #creates the class Continuous
 

 def __init__(self, mu =0, sigma =1):
  SummaryStatistics.__init__(self, mu, sigma)

 def show_length(self):  #a function 
  """ This function returns the length of the data set

  Args: 
   None
  Returns: 
   float : count elements of the list

  """

  return len(self.data)

Itt az osztályomat Continuous()-nek hívják. Ezt fogom importálni a Pythonban a csomagomból a függvények használata előtt.

A show_length() függvény azokat az adatokat használja, amelyek az objektumba kerültek volna, hogy megszámolja az értékek számát.

2. Modulok létrehozása

Mi az a SummaryStatistics SummaryStatistics in Continuous()? Ez egy másik modul (lásd: SummaryStatistics.py a csomagmappában), amelyet úgy hoztam létre, hogy erre a csomagra szeretnék építeni további funkciók hozzáadásához, így a SummaryStatistics az alapmodulom, amely lehetővé teszi a szövegfájl olvasását. A SummaryContinuous.py-nek meg kell hívnia a SummaryStatistics.py-t a függvények futtatásához.

2. Rendszerezze a csomagot

Mitől lesz egy Python-csomag csomag? Ahhoz, hogy Python-csomaggá váljunk, hozzá kell adnunk néhány további fájlt, és rendszerezni kell őket.

A. A csomagmappa a csomagod nevével (itt a csomagom neve summdata), amely tartalmazza:

  • the modules.py: a függvényeidet tartalmazó python szkriptek (itt vannak SummaryStatistics.py and SummaryContinuous.py)
  • an __init__.py
  • license.txt
  • setup.cfg

B. További fájlok:

  • README.md fájl
  • setup.pyfile
  • példa adatkészlet (opcionális)
  • example.py (nem kötelező)

Ellenőrizheti a csomagom "saját Github repóját", hogy megnézze, mi van a fájlok belsejében.

3. Próbálja ki a csomagot helyben

Miután megszerveztem a csomagomat, először helyben próbáltam ki. Először a csomag mappába mentem és telepítettem:

pip install .

Aztán elindítottam a Python-t a terminálban, és kipróbáltam a kódomat. Ha a kód nem működött, hibákat kaptam a pip install alatt, vagy a modulom Pythonba történő importálásakor. Egy másik módja annak, hogy ellenőrizze, hogy a csomagban van-e hiba, tesztszkriptek használata. Még nem mentem bele a programozás ezen területére!

A csomagban lévő kód megváltoztatása után ne felejtse el frissíteni a csomag telepítését ÉS indítsa újra a Pythont a terminálban:

pip install --upgrade .

Kipróbáltam a csomag funkcióimat egy számokat (numbers.txt) tartalmazó szövegfájl segítségével, amely a csomagban található.

>>> from summdata import Continuous
>>> stat = Continuous() #that line!

Itt van! Itt példányosítom az osztályomat Continuous(). Ez létrehoz egy objektumot, amelyet a stat-be teszek. Az objektum létrehozása után futtathatom a függvényeket a Continuous()-ból, az alábbiak szerint:

>>> stat.read_data_file("numbers.txt") #reads the numbers.txt file and stored in stat
>>> stat.calculate_mean() #a function calculating the mean of the number.txt file
59.88235294117647
>>> stat.calculate_median() #calculates the median value of numbers.txt
35.5
>>> stat.calculate_mode() #calculates the mode or modes of numbers.txt 
{3, 23}
>>> stat.calculate_stdev() #calculates the standard deviation
79.85524587725999
>>>

4. Töltsd fel Pypi-re!

Az utolsó lépés a csomag feltöltése a Pypi-be, hogy elérhető legyen a világ számára! A Pypi-be való feltöltéskor szem előtt tartandó dolgok:

  • Csomagjának egyedi névvel kell rendelkeznie, amelyet még soha nem használtak más feltöltött csomagokban.
  • A Pypinek két webhelye van, egy teszt, és az igazi Pypi. Mielőtt feltöltené a tényleges Pypi webhelyre, először meg kell próbálnia a feltöltést a tesztwebhelyen. Ehhez fiókot kell létrehoznia mindkét webhelyen: "Test Pypi" és "Pypi".
  • Ha folytatja a munkát a csomagon, és újabb verziókat kell feltöltenie, nem tudja ugyanazt a verziót feltölteni, ezért mindenképpen módosítsa a verziószámot itt:setup.py.

Ha készen áll Pypi felhasználónevével és jelszavával, futtassa ezeket a parancsokat a terminálon:

python setup.py sdist #prepares the package

pip install twine #if you don't have twine, install it to upload the package to pypi

Most van egy további mappám, a /dist néven, a csomagom archívumával, amely tartalmazza a verziószámomat. Ezt fogjuk feltölteni a Pypi-be.

Először töltse fel a csomagot a test-pypi webhelyre.

twine upload - repository-url https://test.pypi.org/legacy/ dist/*

Itt meg kell adnia felhasználónevét és jelszavát. Ha nem történik hiba a feltöltés során, megpróbálhatja telepíteni a számítógépére:

pip install --index-url https://test.pypi.org/simple/ summdata #this my package name

Ha minden jól megy, ismételje meg ugyanazokat a lépéseket, de a tényleges pypi webhelyen:

twine upload dist/*

Újra kérni fogja a felhasználónevét és jelszavát.

Most nézzük meg a pypi.org oldalon, hogy itt vannak-e a csomag összegző adatai:

Hurrá! Megjelent az első OOP-t használó Python-csomagom, és elérhető a világ számára!

Jó gyakorlat az is, ha felteszi a csomagját a Githubra, és ha akarja, az emberek együttműködhetnek és építhetnek rá, például mi történt a Scikit-learn csomaggal. Számomra ez a nyílt forráskód és a programozás szépsége!

Végső gondolatok

Egy objektum-orientált csomag létrehozása megmutatta, miért kell példányosítanunk egy osztályt a Scikit-learn-en a függvények használata előtt.

Tanácsom az első csomag elkészítésekor: kezdje egyszerűen; amint a csomagod működik, még ha csak néhány funkciója is van, lassan összeadhatod.

Tervezek további funkciókat hozzáadni a kategorikus adatok összegzéséhez!

Amit tanultam az objektumorientált csomag létrehozásából:

  • A csomag létrehozásának és közzétételének folyamata
  • Miért működik a Python gépi tanulási csomag, a Scikit-learn úgy, ahogy működik?

Mint mindig az adattudományban, légy kíváncsi!

Köszönjük, hogy elolvasta ezt a mini oktatóanyagot! Milyen modulokat lenne jó hozzáadni ehhez a csomaghoz az adatkészlet összegzéséhez?

"Github summdata tároló"

"Pypi link a summdata-hoz"