Python instellen voor machine learning. R of Python voor machine learning

Python is een uitstekende taal programmering om verschillende redenen te implementeren. Ten eerste, Python heeft een duidelijke syntaxis. Ten tweede, in Python Het is heel gemakkelijk om tekst te manipuleren. Python gebruikt door een groot aantal mensen en organisaties over de hele wereld, dus het evolueert en is goed gedocumenteerd. De taal is platformonafhankelijk en volledig gratis te gebruiken.

Uitvoerbare pseudo-code

Intuïtieve syntaxis Python vaak uitvoerbare pseudo-code genoemd. Installatie Python standaard al inbegrepen typen op hoog niveau gegevens, zoals lijsten, tupels, woordenboeken, sets, reeksen, enzovoort, die niet langer door de gebruiker hoeven te worden geïmplementeerd. Deze gegevenstypen op hoog niveau maken het gemakkelijk om abstracte concepten te implementeren. Python stelt u in staat te programmeren in elke stijl die u kent: objectgericht, procedureel, functioneel, enzovoort.

IN Python Het is gemakkelijk om tekst te verwerken en te manipuleren, waardoor het ideaal is voor het verwerken van niet-numerieke gegevens. Er zijn een aantal bibliotheken om te gebruiken Python om toegang te krijgen tot webpagina's, en intuïtieve tekstmanipulatie maakt het gemakkelijk om gegevens uit te extraheren HTML-code.

Python populair

Programmeertaal Python populair en veel beschikbare voorbeelden code maakt het leren eenvoudig en snel genoeg. Ten tweede betekent populariteit dat er veel modules zijn voor verschillende toepassingen.

Python is een populaire programmeertaal in zowel wetenschappelijke als financiële kringen. Een aantal bibliotheken voor wetenschappelijk computergebruik zoals: pittig En numpy kunt u bewerkingen uitvoeren op vectoren en matrices. Het maakt de code ook nog leesbaarder en stelt je in staat om code te schrijven die eruitziet als lineaire algebra-uitdrukkingen. Daarnaast zijn onderzoeksbibliotheken pittig En numpy gecompileerd met behulp van talen op laag niveau ( VAN En fortran), wat berekeningen veel sneller maakt bij het gebruik van deze tools.

wetenschappelijke instrumenten Python werk geweldig in combinatie met grafische tool gerechtigd matplotlib. matplotlib kan tweedimensionaal bouwen en 3D-graphics en kan werken met de meeste build-types die vaak worden gebruikt in de wetenschappelijke gemeenschap.

Python heeft ook een interactieve shell waarmee u de elementen van het programma dat wordt ontwikkeld kunt bekijken en controleren.

Nieuwe module Python, genaamd pylab, probeert de mogelijkheden te combineren numpy, pittig, En matplotlib in dezelfde omgeving en installatie. Tot op heden is het pakket pylab is nog in ontwikkeling, maar heeft een grote toekomst.

Voor-en nadelen Python

Mensen gebruiken verschillende programmeertalen. Maar voor velen is een programmeertaal slechts een hulpmiddel om een ​​probleem op te lossen. Python is de taal top niveau, waardoor u meer tijd kunt besteden aan het begrijpen van de gegevens en minder aan het nadenken over hoe ze aan de computer moeten worden gepresenteerd.

Het enige echte nadeel Python is dat het code niet zo snel uitvoert als bijvoorbeeld Java of C. De reden hiervoor is dat Python is een geïnterpreteerde taal. Het is echter mogelijk om gecompileerd . aan te roepen C-programma's van Python. Hierdoor kunt u de beste verschillende talen programmeren en het programma stap voor stap ontwikkelen. Als je hebt geëxperimenteerd met een idee met behulp van Python en besloot dat dit precies is waar je in wilt worden geïmplementeerd afgewerkt systeem, dan zal het gemakkelijk zijn om deze overgang van het prototype naar werk programma. Als het programma is gebouwd volgens: modulair principe, dan kun je er eerst voor zorgen dat wat je nodig hebt werkt in code die is geschreven in Python, en om de snelheid van code-uitvoering te verbeteren, herschrijft u kritieke secties in de taal C. Bibliotheek C++ Boost maakt het gemakkelijk om dit te doen. Andere tools zoals Cython En PyPy stelt u in staat om de prestaties van het programma te verbeteren in vergelijking met de gebruikelijke Python.

Als het idee zelf geïmplementeerd door het programma "slecht" is, dan is het beter om dit te begrijpen door een minimum aan kostbare tijd te besteden aan het schrijven van code. Als het idee werkt, kun je de prestaties altijd verbeteren door gedeeltelijk kritieke delen van de programmacode te herschrijven.

IN afgelopen jaren een groot aantal ontwikkelaars, inclusief degenen met een hogere opleiding, hebben gewerkt aan het verbeteren van de prestaties van de taal en zijn individuele pakketten. Daarom is het niet zeker dat u code in C, die sneller zal werken dan wat al beschikbaar is in Python.

Welke versie van Python te gebruiken?

Momenteel veel gebruikt verschillende versies dit, namelijk 2.x en 3.x. De derde versie is nog in actieve ontwikkeling, de meeste van de verschillende bibliotheken werken gegarandeerd op de tweede versie, dus ik gebruik de tweede versie, namelijk 2.7.8, wat ik je aanraad om te doen. Er zijn geen fundamentele wijzigingen in de 3e versie van deze programmeertaal, dus uw code kan met minimale toekomstige wijzigingen, indien nodig, worden overgedragen voor gebruik met de 3e versie.

Ga om te installeren naar de officiële website: www.python.org/downloads/

Selecteer uw besturingssysteem en download het installatieprogramma. Ik zal niet in detail stilstaan ​​​​bij de kwestie van de installatie, zoekmachines kunnen u hier gemakkelijk mee helpen.

Ik ben op macos een versie geïnstalleerd Python, anders dan degene die in het systeem is geïnstalleerd en pakketten via de pakketbeheerder Anaconda(trouwens, er zijn installatie-opties onder ramen En linux).

Onder ramen, ze zeggen, Python gezet met een tamboerijn, maar ik heb het zelf niet geprobeerd, ik zal niet liegen.

numpy

numpy is het hoofdpakket voor wetenschappelijk computergebruik in Python. numpy is een programmeertaalextensie Python, die ondersteuning toevoegt voor grote multidimensionale arrays en matrices, samen met een grote bibliotheek met high-level wiskundige functies om met deze arrays te werken. Voorganger numpy, pakket Numeriek, is oorspronkelijk gemaakt door Jim Haganin met input van een aantal andere ontwikkelaars. In 2005 creëerde Travis Oliphant numpy door de functies van een concurrerend pakket in te schakelen Numarray in Numeriek terwijl u ingrijpende wijzigingen aanbrengt.

Voor installatie in de Terminal linux wij voeren uit:

sudo apt-get update sudo apt-get install python-numpy

sudo apt-get update

sudo apt - installeer python - numpy

Een eenvoudige code met NumPy die een eendimensionale vector van 12 getallen van 1 tot 12 genereert en deze omzet in een driedimensionale matrix:

van numpy import * a = arange (12) a = a.reshape (3,2,2) print a

van numpy import *

a = bereik (12)

een = een. omvormen (3 , 2 , 2 )

print een


Het resultaat op mijn computer ziet er als volgt uit:

Over het algemeen wordt in de Terminal de code voor: Python Ik doe het niet vaak, behalve om snel iets te berekenen, zoals op een rekenmachine. ik werk graag in PyCharm IDE. Dit is hoe de interface eruit ziet als je de bovenstaande code uitvoert

pittig

pittig is een open-source bibliotheek voor wetenschappelijk computergebruik. Voor het werk pittig moet vooraf worden geïnstalleerd numpy, die gemakkelijke en snelle bewerkingen biedt met multidimensionale arrays. Bibliotheek pittig werkt met arrays numpy, en biedt veel handige en efficiënte rekenprocedures, bijvoorbeeld voor numerieke integratie en optimalisatie. numpy En pittig gemakkelijk te gebruiken, maar krachtig genoeg om verschillende wetenschappelijke en technische berekeningen uit te voeren.

De bibliotheek installeren: pittig in linux, voer in de terminal uit:

sudo apt-get update sudo apt-get install python-scipy

sudo apt-get update

sudo apt - installeer python - scipy

Ik zal een voorbeeld geven van een code voor het vinden van het extremum van een functie. Het resultaat wordt al weergegeven met het pakket matplotlib, hieronder besproken.

importeer numpy als np van scipy import special, optimaliseer import matplotlib.pyplot als plt f = lambda x: -special.jv(3, x) sol = optimal.minimize(f, 1.0) x = np.linspace (0, 10, 5000) plt.plot(x, speciaal.jv(3, x), "-", sol.x, -sol.fun, "o") plt.show()

importeer numpy als np

van scipy import special, optimaliseren

f = lambda x: - speciaal. jv (3 , x )

sol = optimaliseren. minimaliseren (f , 1.0 )

x = np. linspace (0 , 10 , 5000 )

plt. plot (x , speciaal . jv (3 , x ) , "-" , sol . x , - sol . leuk , "o")

plt. laten zien()

Het resultaat is een grafiek met een gemarkeerd extremum:

Probeer voor de interesse hetzelfde in de taal te implementeren C en vergelijk het aantal regels code dat nodig is om het resultaat te krijgen. Hoeveel lijnen heb je gekregen? Honderd? Vijfhonderd? Tweeduizend?

panda's

panda's is een pakket Python, ontworpen om snelle, flexibele en expressieve gegevensstructuren te bieden die het gemakkelijk maken om op een eenvoudige en intuïtieve manier met "relatieve" of "gelabelde" gegevens te werken. panda's streeft ernaar de belangrijkste bouwsteen op hoog niveau voor hosting te zijn Python praktische analyse van gegevens verkregen uit de echte wereld. Bovendien beweert dit pakket het krachtigst en meest flexibel te zijn open source tool voor data-analyse/-verwerking beschikbaar in elke programmeertaal.

panda's zeer geschikt voor het werken met verschillende soorten gegevens:

  • Tabelgegevens met kolommen verschillende types, zoals in tabellen SQL of excelleren.
  • Geordende en ongeordende data (niet noodzakelijk met een constante frequentie) tijdreeksen.
  • Willekeurige matrixgegevens (homogeen of heterogeen) met gelabelde rijen en kolommen.
  • Elke andere vorm van observationele of statistische datasets. Voor de gegevens hoeft eigenlijk geen label in de gegevensstructuur te worden geplaatst. panda's.

Een pakket installeren: panda's uitvoeren in terminal linux:

sudo apt-get update sudo apt-get install python-pandas

sudo apt-get update

sudo apt - installeer python - panda's

Een eenvoudige code die een eendimensionale array omzet in een gegevensstructuur panda's:

importeer panda's als pd importeer numpy als np-waarden = np.array() ser = pd.Series(waarden) print ser

panda's importeren als pd

importeer numpy als np

waarden = np. reeks ([ 2.0 , 1.0 , 5.0 , 0.97 , 3.0 , 10.0 , 0.0599 , 8.0 ] )

ser=pd. Reeks (waarden)

drukker

Het resultaat zal zijn:

matplotlib

matplotlib is een bibliotheek met grafische constructies voor een programmeertaal Python en zijn uitbreidingen van computationele wiskunde numpy. De bibliotheek biedt een objectgeoriënteerde API voor het inbedden van grafieken in toepassingen met behulp van de tools GUI algemeen doel zoals: WxPython, Qt, of GTK+. Er is ook een procedurele pylab-herinnerende interface MATLAB. pittig toepassingen matplotlib.

De bibliotheek installeren: matpoltlib in linux voer de volgende opdrachten uit:

sudo apt-get update sudo apt-get install python-matplotlib

sudo apt-get update

sudo apt - get install python - matplotlib

Voorbeeldcode met behulp van de bibliotheek matplotlib histogrammen maken:

import numpy als np import matplotlib.mlab als mlab import matplotlib.pyplot als plt # voorbeeldgegevens mu = 100 # gemiddelde van distributie sigma = 15 # standaarddeviatie van distributie x = mu + sigma * np.random.randn(10000) num_bins = 50 # het histogram van de gegevens n, bins, patches = plt.hist(x, num_bins, normed=1, facecolor="green", alpha=0.5) # voeg een "best fit" regel toe y = mlab.normpdf(bins , mu, sigma) plt.plot(bins, y, "r--") plt.xlabel("Smarts") plt.ylabel("Waarschijnlijkheid") plt.title(r"Histogram van IQ: $\mu=100 $, $\sigma=15$") # Pas de spatiëring aan om clipping van ylabel te voorkomen plt.subplots_adjust(left=0.15) plt.show()

importeer numpy als np

importeer matplotlib . mlab als mlab

importeer matplotlib . pyplot als plt

#voorbeeldgegevens

mu = 100 # gemiddelde verdeling

sigma = 15 # standaarddeviatie van verdeling

x = mu + sigma * np . willekeurig. rand (10000)

numbins = 50

# het histogram van de gegevens

n, bakken, patches = plt. hist (x , num_bins , normed = 1 , gezichtskleur = "groen" , alpha = 0.5 )

# voeg een "best fit" regel toe

y=mlab. normpdf (bakken , mu , sigma )

plt. plot (bakken , y , "r--")

plt. xlabel("Slimme")

plt. ylabel("Waarschijnlijkheid")

plt. titel (r "Histogram van IQ: $\mu=100$, $\sigma=15$")

# Pas de afstand aan om het knippen van ylabel te voorkomen

plt. subplots_adjust (links = 0.15 )

plt. laten zien()

Het resultaat hiervan is:

Ik vind het ook heel schattig!

is een schelp voor interactief computergebruik in meerdere programmeertalen, oorspronkelijk ontwikkeld voor een programmeertaal Python. stelt u in staat om de mogelijkheden van de weergave uit te breiden, syntaxis toe te voegen aan de shell, automatisch aanvullen en een uitgebreide geschiedenis van opdrachten. biedt momenteel de volgende opties:

  • Krachtige interactieve shells (terminal en gebaseerd op Qt).
  • Browsergebaseerde editor met ondersteuning voor code, tekst, wiskundige uitdrukkingen, ingesloten plots en andere presentatiefuncties.
  • Ondersteunt interactieve datavisualisatie en het gebruik van GUI-tools.
  • Flexibele, integreerbare tolken voor het werken in uw eigen projecten.
  • Gebruiksvriendelijke, krachtige parallelle computertools.

IPython-website:

Om IPython op Linux te installeren, voert u de volgende opdrachten uit in een terminal:

sudo apt-get update sudo pip install ipython

Ik zal een voorbeeld geven van een code die bouwt lineaire regressie voor een aantal gegevens die beschikbaar zijn in het pakket scikit-leren:

import matplotlib.pyplot as plt import numpy as np from sklearn import datasets, linear_model # Laad de diabetes dataset diabetes = datasets.load_diabetes() # Gebruik slechts één functie diabetes_X = diabetes.data[:, np.newaxis] diabetes_X_temp = diabetes_X[: , :, 2] # Splits de gegevens op in trainings-/testsets diabetes_X_train = diabetes_X_temp[:-20] diabetes_X_test = diabetes_X_temp[-20:] # Splits de doelen op in trainings-/testsets diabetes_y_train = diabetes.target[:-20] diabetes_y_test = diabetes.target[-20:] # Maak een lineair regressie-object regr = linear_model.LinearRegression() # Train het model met behulp van de trainingssets regr.fit(diabetes_X_train, diabetes_y_train) # De coëfficiënten print("Coëfficiënten: \n", regr .coef_) # The mean square error print("Residual sum of squares: %.2f" % np.mean((regr.predict(diabetes_X_test) - diabetes_y_test) ** 2)) # Verklaarde variantiescore: 1 is perfecte voorspellingsprint ("Variantiescore: %.2f" % regr.score(diabetes_X_test, diabetes_y_test)) # Plot outp uts plt.scatter(diabetes_X_test, diabetes_y_test, color="black") plt.plot(diabetes_X_test, regr.predict(diabetes_X_test), color="blue", linewidth=3) plt.xticks(()) plt.yticks(( )) plt.show()

importeer matplotlib . pyplot als plt

importeer numpy als np

van sklearn import datasets , linear_model

# Laad de diabetesdataset

diabetes = datasets. load_diabetes()

# Gebruik slechts één functie

suikerziekte_X = suikerziekte. gegevens[ : , np . nieuwe as]

Hallo!

In dit artikel zal ik het hebben over een nieuwe comfortabele manier om in Python te programmeren.

Het lijkt meer op het schrijven van artikelen (rapporten/demonstraties/onderzoek/voorbeelden) in plaats van programmeren: je kunt duidelijke verklarende tekst invoegen tussen blokken Python-code. Het resultaat van code-uitvoering is niet alleen cijfers en tekst (zoals het geval is met de console wanneer standaard werk met Python), maar ook grafieken, grafieken, afbeeldingen…

Voorbeelden van documenten die u kunt maken:

Ziet er geweldig uit? Wilt u dezelfde documenten maken? Dan is dit artikel iets voor jou!

Eerst moet je het Anaconda-pakket installeren. Wat het is? Het is een volledig aangepaste Python samen met een vooraf geïnstalleerde set van de meest populaire modules. Anaconda bevat ook de JupyterLab-omgeving, waarin we documenten gaan maken met Python-code.

Als je Python al hebt geïnstalleerd, verwijder het dan eerst. U kunt dit doen via het paneel Programma's en onderdelen in het Configuratiescherm.

Downloaden

Download Anaconda voor Python 3.6 (Windows 7 en hoger) of Python 2.7 (Windows XP).

Het installatiebestand weegt 500+ MB, dus het downloaden kan lang duren.

Installatie

Voer het gedownloade bestand uit. Het installatievenster wordt geopend. Klik op de eerste twee pagina's direct op "Volgende". Vervolgens kunt u ervoor kiezen om Anaconda alleen te installeren voor: huidige gebruiker computer, of voor iedereen.

Belangrijk! In het volgende venster moet u het pad specificeren waar Anaconda zal worden geïnstalleerd. Kies een pad dat geen mappen met spaties in hun naam bevat (bijvoorbeeld Programmabestanden) en bevat geen niet-Engelse Unicode-tekens (bijvoorbeeld Russische letters)!

Het negeren van deze regels kan tot problemen leiden bij het werken met verschillende modules!

Persoonlijk heb ik de Anaconda-map rechtstreeks in de hoofdmap van de C-schijf gemaakt en het volgende pad opgegeven:

In het laatste venster staan ​​twee vinkjes. Laat alles zoals het is.

Ten slotte zal de installatie beginnen. Het kan ~10 minuten duren. Je kunt in alle rust thee drinken

Anaconda Navigator

Nadat u Anaconda met succes hebt geïnstalleerd, start u het Anaconda Navigator-programma vanuit het menu Start. Bij het opstarten zou u dit logo moeten zien:

Dan wordt de navigator zelf geopend. Dit is het startpunt voor het werken met Anaconda.

In het centrale deel van het venster bevinden zich verschillende programma's, die zijn opgenomen in het Anaconda-pakket. Een aantal daarvan is al geïnstalleerd.

Kortom, we zullen "jupyterlab" gebruiken: daarin worden prachtige documenten gemaakt.

Aan de linkerkant bevinden zich delen van de navigator. Standaard is het gedeelte 'Home' geopend. In het gedeelte "Omgevingen" kunt u extra Python-modules inschakelen / uitschakelen / laden met behulp van een handige interface.

JupyterLab

In de "Home" sectie van de navigator, start (de "Launch" knop) het "jupyterlab" programma (de allereerste in de lijst).

Uw standaardbrowser zou met de JupyterLab-omgeving op een apart tabblad moeten openen.

De inhoud van de map C:\Users\ wordt aan de linkerkant weergegeven.<ИМЯ_ВАШЕЙ_УЧЕТНОЙ_ЗАПИСИ> .

Aan de rechterkant is het Kladblok-bestand "untitled.ipynb" geopend. Als er niets aan de rechterkant staat, kun je een nieuw leeg notitieboek maken door op de "+" in de linkerbovenhoek te klikken en "Notebook Python 3" te selecteren:

Notitieboekje

Het is tijd om erachter te komen wat notebooks zijn.

We schrijven meestal Python-code in .py-bestanden, en vervolgens voert de Python-interpreter ze uit en drukt de gegevens af naar de console. Voor handige bediening programmeeromgevingen (IDE's) worden vaak gebruikt met dergelijke bestanden. Onder hen is PyCharm, waar ik het in het artikel over had.

Maar er is een andere benadering. Het bestaat uit het maken van notebooks (notebook) met de ipynb-extensie. Notebooks bestaan ​​uit een groot aantal blokken. Er zijn blokken met platte tekst en er zijn blokken met Python-code.

Typ wat Python-code in het eerste blok in Kladblok. Ik maak bijvoorbeeld een variabele die gelijk is aan de som van de getallen 3 en 2:

Op de volgende regel we schrijven gewoon de naam van deze variabele. Waarvoor? Nu zul je zien.

Nu moeten we dit blok uitvoeren. Klik hiervoor op het driehoekje in de werkbalk boven het kladblok of op de toetsencombinatie Ctrl + Enter:

Onder het blok met Python-code is een ander blok verschenen, dat de uitvoer bevat van de resultaten van de uitvoering van het vorige blok. Nu bevat de uitvoer het nummer 5. Dit nummer wordt alleen op de tweede regel van het blok weergegeven dat we hebben geschreven.

Om dit effect te bereiken, zouden we in normale programmeeromgevingen print(a) moeten schrijven, maar hier kan de aanroep van deze functie worden weggelaten en alleen de naam van de variabele die we willen afdrukken, schrijven.

Maar je kunt de waarden (cijfers en tekst) van variabelen (weliswaar via een functie) in andere programmeeromgevingen weergeven.

Laten we proberen iets moeilijkers te doen. Laat bijvoorbeeld een afbeelding zien.

Maak een nieuw blok aan met de knop in de werkbalk boven het kladblok.

In dit blok downloaden we het Anaconda-logo van de Wikimedia-site en voeren het uit:

Van PIL-import Beeldimportverzoeken image_url = "https://upload.wikimedia.org/wikipedia/en/c/cd/Anaconda_Logo.png" im = Image.open(requests.get(image_url, stream=True).raw) ik ben

Het resultaat zal er als volgt uitzien:

Dat is waar conventionele ontwikkelomgevingen niet toe in staat zijn. En in JupyterLab - gemakkelijk!

Laten we nu proberen een tekstblok zonder opmaak toe te voegen tussen de twee reeds gemaakte Python-codeblokken. Selecteer hiervoor het eerste blok met een klik en voeg een nieuw blok toe via de knop in de werkbalk. Het nieuwe blok wordt direct na het eerste blok ingevoegd.

Als je alles goed hebt gedaan, ziet het resultaat er als volgt uit:

Standaard zijn blokken in JupyterLab voor Python-code. Om ze in te veranderen tekstblokken, moet u hun type wijzigen via de werkbalk. Helemaal aan het einde van het paneel opent u de lijst en selecteert u "Markdown":

Het geselecteerde blok verandert in een tekstblok. De getypte tekst kan worden opgemaakt schuingedrukt of maak het vetgedrukt. Meer informatie over Markdown (tools voor tekstontwerp) vindt u hier.

Zo kun je kladblok-tekstblokken opmaken:

Exporteren

In JupyterLab kunt u een notitieboek exporteren naar de meest verschillende formaten. Om dit te doen, selecteert u helemaal bovenaan de omgeving het tabblad "Notebook". Selecteer in het menu dat wordt geopend het item "Exporteren naar ..." en selecteer het formaat (bijvoorbeeld PDF) waarnaar u uw notebook wilt converteren.

Hier is een link naar een kern met een notitieblok uit dat artikel.

Python-modules beheren

U kunt modules in-/uitschakelen/uploaden vanuit Anaconda Navigator. Selecteer hiervoor in het linkermenu "Omgevingen":

Standaard wordt een lijst met geïnstalleerde modules weergegeven (~217 stuks). Onder hen zijn populaire zoals numpy (werken met arrays) of scypi (wetenschappelijke en technische berekeningen).

Om nieuwe pakketten te installeren, selecteert u in het vervolgkeuzemenu boven de tabel (waar staat "Geïnstalleerd"), "Niet geïnstalleerd":

De lijst wordt bijgewerkt - de lijst met verwijderde modules wordt automatisch geladen.

Vink de vakjes aan naast de modules die u wilt downloaden en klik vervolgens op de knop "Toepassen" in de rechterbenedenhoek om ze te downloaden en te installeren. Na voltooiing van het proces kunt u deze modules in notebooks gebruiken.

conclusies

U kunt zich concentreren op het schrijven van het algoritme en onmiddellijk de resultaten van de uitvoering van de code visualiseren, in plaats van te rommelen met complexe programmeeromgevingen grote programma's en een console die alleen cijfers en tekst kan uitvoeren.

Alexander Krot, MIPT-student, mijn goede vriend en onlangs collega, lanceerde een reeks artikelen over praktische tools voor big data mining en machine learning (datamining en machine learning).

Er zijn al 3 artikelen gepubliceerd, ik hoop dat er in de toekomst meer zullen volgen:
1) Inleiding tot machine learning met Python en Scikit-Learn
2) De kunst van feature-engineering in machine learning
3) Als er echt veel gegevens zijn: Vowpal Wabbit

De gepubliceerde artikelen richten zich op de praktische aspecten van het werken met tools voor automatische gegevensanalyse en algoritmen waarmee u gegevens kunt voorbereiden voor efficiënte machineanalyse. In het bijzonder worden voorbeelden van code in de Python-taal gegeven (we hebben trouwens onlangs Python gebruikt) met een gespecialiseerde Scikit-Learn-bibliotheek, die snel kan worden uitgevoerd op thuis computer of personal cloud om zelf te proeven van big data.

Onlangs zat ik te denken hoe. Bekendheid met de bovenstaande tools stelt ons nu in staat om praktische experimenten in deze richting uit te voeren (trouwens, een Python-programma kan ook worden uitgevoerd op de Linux die in de controller is ingebouwd, maar hier zijn voorbeelden met het vermalen van gigabytes aan gegevens mobiele processor waarschijnlijk niet trekken). En trouwens, Scala wordt ook gerespecteerd door ingenieurs die met big data werken, het zal nog gemakkelijker zijn om dergelijke code te integreren.

Traditioneel betekent het beheersen van alle tools niet de noodzaak om een ​​goed probleem te vinden dat met hun hulp effectief kan worden opgelost (tenzij, natuurlijk, iemand anders deze taak voor u oplegt). maar ruimte extra functies opent. In mijn gedachten zou het er ongeveer zo kunnen uitzien: een robot (of een groep robots) verzamelt informatie van sensoren, stuurt het naar een server, waar het wordt verzameld en verwerkt om naar patronen te zoeken; verder zal het algoritme de gevonden patronen controleren met de operationele waarden van de sensoren van de robot en hem voorspellingen sturen over het meest waarschijnlijke gedrag omgeving. Of er wordt vooraf een kennisbank over het terrein of een bepaald type terrein op de server opgesteld (bijvoorbeeld in de vorm van karakteristieke foto's van het landschap en typische objecten), en de robot kan deze kennis gebruiken om plangedrag in een operationele omgeving.

Ik sleep het eerste artikel voor seeding, de rest volgt de links naar Habré:

Numpy importeren als np import urllib # url met dataset url = "http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"# download het bestand raw_data = urllib.urlopen(url) # laad het CSV-bestand als een numpy-matrix dataset = np.loadtxt(raw_data, delimiter="," ) # scheid de gegevens van de doelattributen X = dataset[:,0 :7 ] y = dataset[:,8 ]

Gegevens normalisatie

Iedereen is zich er terdege van bewust dat de meeste gradiëntmethoden (waarop bijna alle machine learning-algoritmen zijn gebaseerd) zeer gevoelig zijn voor gegevensschaling. Daarom wordt het, voordat de algoritmen worden uitgevoerd, meestal ofwel gedaan: normalisatie, of de zogenaamde standaardisatie. Normalisatie houdt in dat de nominale kenmerken worden vervangen zodat elk van hen in het bereik van 0 tot 1 ligt. Standaardisatie daarentegen omvat het voorbewerken van de gegevens, waarna elk kenmerk een gemiddelde van 0 en een variantie van 1 heeft. Scikit-Learn heeft hiervoor al functies klaar:

Van sklearn import voorverwerking # normaliseer de gegevensattributen normalized_X = preprocessing.normalize(X) # standaardiseer de data-attributen standardized_X = preprocessing.scale(X)

functie selectie

Het is geen geheim dat vaak het belangrijkste bij het oplossen van een probleem de mogelijkheid is om correct te selecteren en zelfs functies te creëren. In de Engelse literatuur heet dit Functieselectie En Functie-engineering. Waar Future Engineering een behoorlijk creatief proces is en meer steunt op intuïtie en expertise, beschikt Feature Selection al over een groot aantal kant-en-klare algoritmen. "Tree"-algoritmen maken de berekening van de informatie-inhoud van functies mogelijk:

Van sklearn import metrische gegevens van sklearn.ensemble import ExtraTreesClassifier model = ExtraTreesClassifier() model.fit(X, y) # toon het relatieve belang van elk attribuut print(model.feature_importances_)

Alle andere methoden zijn op de een of andere manier gebaseerd op de efficiënte opsomming van subsets van kenmerken om de beste subset te vinden, waarop het geconstrueerde model de beste kwaliteit geeft. Een dergelijk iteratie-algoritme is het Recursive Feature Elimination-algoritme, dat ook beschikbaar is in de Scikit-Learn-bibliotheek:

Van sklearn.feature_selection RFE importeren van sklearn.linear_model Import LogisticRegression model = LogisticRegression() # maak het RFE-model en selecteer 3 attributen rfe = RFE(model, 3 ) rfe = rfe.fit(X, y) # vat de selectie van de attributen samen print(rfe.support_) print(rfe.ranking_)

Een algoritme bouwen

Zoals reeds opgemerkt, zijn alle belangrijke algoritmen voor machine learning geïmplementeerd in Scikit-Learn. Laten we er een paar bekijken.

Logistieke regressie

Het wordt meestal gebruikt om classificatieproblemen op te lossen (binair), maar classificatie met meerdere klassen is ook toegestaan ​​(de zogenaamde one-vs-all methode). Het voordeel van dit algoritme is dat we bij de uitvoer van elk object de kans hebben om tot de klasse te behoren

Van sklearn import metrische gegevens van sklearn.linear_model import LogisticRegression model = LogisticRegression() model.fit(X, y) print(model) # maak voorspellingen verwacht = y voorspeld = model.predict(X)

Naïeve Bayes

Het is ook een van de meest bekende algoritmen voor machine learning, waarvan de belangrijkste taak het herstellen van de distributiedichtheden van de trainingsvoorbeeldgegevens is. Vaak geeft deze methode goede prestaties bij classificatieproblemen met meerdere klassen.

Van sklearn import metrische gegevens van sklearn.naive_bayes import GaussianNB model = GaussianNB() model.fit(X, y) print(model) # maak voorspellingen verwacht = y voorspeld = model.predict(X) # vat de pasvorm van het model samen print(metrics.classification_report(verwacht, voorspeld)) print(metrics.confusion_matrix(verwacht, voorspeld))

K-dichtstbijzijnde buren

Methode kNN (k-Dichtbijzijnde Buren) vaak gebruikt als onderdeel complexer classificatie-algoritme. De evaluatie ervan kan bijvoorbeeld worden gebruikt als een teken voor een object. En soms geeft een simpele kNN op goed gekozen features geweldige kwaliteit. Bij competente instelling parameters (voornamelijk metrische gegevens), geeft het algoritme vaak goede kwaliteit bij regressieproblemen

Van sklearn import metrische gegevens van sklearn.neighbors import KneighboursClassifier # pas een k-nearest-buurmodel aan de gegevens aan model = KNeighboursClassifier() model.fit(X, y) print(model) # maak voorspellingen verwacht = y predicted = model.predict(X) # vat de pasvorm van het model samen print(metrics.classification_report(verwacht, voorspeld)) print(metrics.confusion_matrix(verwacht, voorspeld))

Beslissingsbomen

Classificatie- en regressiebomen (CART) vaak gebruikt in taken waarin objecten categorische kenmerken hebben en wordt gebruikt voor regressie- en classificatieproblemen. Bomen zijn zeer geschikt voor classificatie in meerdere klassen

Van sklearn importstatistieken van sklearn.tree import DecisionTreeClassifier # pas een CART-model aan de gegevens aan model = DecisionTreeClassifier() model.fit(X, y) print(model) # maak voorspellingen verwacht = y predicted = model.predict(X) # vat de pasvorm van het model samen print(metrics.classification_report(verwacht, voorspeld)) print(metrics.confusion_matrix(verwacht, voorspeld))

Ondersteuning vector machine

SVM (Ondersteuning Vector Machines) is een van de meest bekende algoritmen voor machine learning, voornamelijk toegepast op het classificatieprobleem. Net als logistische regressie, maakt SVM classificatie in meerdere klassen mogelijk met behulp van de één-tegen-alles-methode.

Van sklearn importstatistieken van sklearn.svm import SVC # pas een SVM-model aan het datamodel aan = SVC() model.fit(X, y) print(model) # maak voorspellingen verwacht = y voorspeld = model.predict(X) # vat de pasvorm van het model samen print(metrics.classification_report(verwacht, voorspeld)) print(metrics.confusion_matrix(verwacht, voorspeld))

Naast classificatie- en regressie-algoritmen heeft Scikit-Learn nog een groot aantal meer moeilijke algoritmes, inclusief clustering, evenals geïmplementeerde technieken voor het construeren van composities van algoritmen, waaronder: Zakken En boosten.

Algoritme parameter optimalisatie

Een van de moeilijkste stappen bij het bouwen van echt efficiënte algoritmen is het kiezen van juiste parameters. Meestal wordt dit gemakkelijker met ervaring, maar op de een of andere manier moet je overboord gaan. Gelukkig heeft Scikit-Learn hier al aardig wat features voor geïmplementeerd.

Laten we bijvoorbeeld eens kijken naar de selectie van de regularisatieparameter, waarin we achtereenvolgens verschillende waarden sorteren:

Importeer numpy als np van sklearn.linear_model import Ridge van sklearn.grid_search import GridSearchCV # bereid een reeks alfawaarden voor om te testen alfa's = np.array() # maak en pas een nokregressiemodel aan en test elke alfa model = Ridge() grid = GridSearchCV(estimator=model, param_grid=dict(alpha=alphas)) grid.fit(X, y) print(grid) # vat de resultaten van de rasterzoekopdracht samen print(grid.best_score_) print(grid.best_estimator_.alpha)

Soms blijkt het efficiënter om meerdere keren willekeurig een parameter uit een bepaald segment te selecteren, de kwaliteit van het algoritme voor een bepaalde parameter te meten en zo de beste te kiezen:

Importeer numpy als np van scipy.stats importeer uniform als sp_rand van sklearn.linear_model import Ridge van sklearn.grid_search import RandomizedSearchCV # bereid een uniforme verdeling voor om te samplen voor de alfaparameter param_grid = ("alpha": sp_rand()) # maak en pas een nokregressiemodel aan, test willekeurige alfawaarden model = Ridge() rsearch = RandomizedSearchCV(estimator=model, param_distributions=param_grid, n_iter=100) rsearch.fit(X, y) print(rsearch) # vat de resultaten van het zoeken naar willekeurige parameters samen print(rsearch.best_score_) print(rsearch.best_estimator_.alpha)

We hebben het hele proces van werken met de Scikit-Learn-bibliotheek behandeld, behalve het terugsturen van de resultaten naar een bestand, wat als oefening voor de lezer wordt overgelaten, omdat een van de voordelen van Python (en de Scikit-Learn-bibliotheek zelf ) over R is uitstekende documentatie. In de volgende delen zullen we elk van de secties in detail bekijken, in het bijzonder zullen we iets belangrijks aansnijden als: Functie-engineering.

Ik hoop echt dat dit materiaal beginnende datawetenschappers zal helpen om zo snel mogelijk machine learning-problemen in de praktijk op te lossen. Tot slot wil ik degenen die net beginnen met deelnemen aan machine learning-wedstrijden succes en geduld wensen!

Cheatsheets zullen je geest vrijmaken voor belangrijkere taken. We hebben 27 van de beste spiekbriefjes verzameld die u kunt en zou moeten gebruiken.

Ja, machine learning ontwikkelt zich met grote sprongen en ik veronderstel dat mijn verzameling verouderd zal zijn, maar voor juni 2017 is het meer dan relevant.

Als je niet alle spiekbriefjes afzonderlijk wilt downloaden, download dan het kant-en-klare zip-archief.

Machinaal leren

Er zijn veel handige stroomdiagrammen en tabellen die machine learning behandelen. Hieronder staan ​​de meest complete en noodzakelijke.

Neurale netwerkarchitecturen

Met de komst van nieuwe neurale netwerkarchitecturen is het moeilijk geworden om ze te volgen. Een groot aantal van afkortingen (BiLSTM, DCGAN, DCIGN, kent iemand ze allemaal?) kunnen verwarrend zijn.

Dus besloot ik een spiekbriefje samen te stellen met veel van deze architecturen. Het meeste is van neurale netwerken. Er is maar één probleem bij zo'n visualisatie: het gebruiksprincipe wordt niet getoond. Variational autoencoders (VAE's) kunnen er bijvoorbeeld uitzien als autoencoders (AE's), maar het leerproces is anders.

Microsoft Azure-stroomdiagram

Microsoft Azure machine learning spiekbriefjes helpen je kiezen juiste algoritme voor een voorspellend analysemodel. machine studio Microsoft-training Azure bevat een grote bibliotheek met algoritmen voor regressie, classificatie, clustering en detectie van afwijkingen.

Blokdiagram van SAS-algoritmen

Met spiekbriefjes met SAS-algoritmen kunt u snel het juiste algoritme vinden om een ​​specifiek probleem op te lossen. De hier gepresenteerde algoritmen zijn het resultaat van een compilatie van feedback en advies van verschillende datawetenschappers, ontwikkelaars en machine learning-experts.

Verzameling van algoritmen

Hier zijn regressie, regularisatie, clustering, beslissingsboom, Bayesiaanse en andere algoritmen. Ze zijn allemaal gegroepeerd volgens de principes van werk.

Ook de lijst in infographic formaat:

Voorspellingsalgoritme: "voor/tegen"

Deze spiekbriefjes zijn verzameld beste algoritmen, die worden gebruikt in voorspellende analyse. Forecasting is een proces waarbij de waarde van een outputvariabele wordt bepaald uit een set inputvariabelen.

Python

Het is niet verrassend dat de Python-taal een grote gemeenschap en veel online bronnen heeft. Voor deze sectie heb ik de beste spiekbriefjes geselecteerd waarmee ik heb gewerkt.

Dit is een verzameling van de 10 meest gebruikte algoritmen voor machine learning met codes Python en R. De spiekbrief is een goede referentie om u te helpen bij het gebruik van nuttige algoritmen voor machine learning.

Het valt niet te ontkennen dat Python tegenwoordig in opkomst is. De spiekbriefjes bevatten alles wat je nodig hebt, inclusief functies en een definitie van objectgeoriënteerd programmeren met de Python-taal als voorbeeld.

En deze spiekbrief zou een geweldige aanvulling zijn op het inleidende deel van elke Python-tutorial:

numpy

NumPy is een bibliotheek waarmee Python gegevens snel kan verwerken. Bij de eerste studie kan het moeilijk zijn om alle functies en methoden te onthouden, dus hier zijn de handigste spiekbriefjes die de studie van de bibliotheek enorm kunnen vergemakkelijken. Geschilderd importeren / exporteren, arrays maken, kopiëren, sorteren, elementen verplaatsen en nog veel meer.

En hier is een extra theoretisch deel:

Een schematische weergave van enkele gegevens is te vinden in deze spiekbrief:

Alle Nodige informatie met grafieken:

De Pandas-bibliotheek op hoog niveau is ontworpen voor gegevensanalyse. Relevante frames, panelen, objecten, pakketfunctionaliteit en andere noodzakelijke informatie worden verzameld in een handig georganiseerd spiekbriefje:

Een schematische weergave van informatie over de Pandas-bibliotheek:

En deze spiekbrief bevatte een gedetailleerde presentatie met voorbeelden en tabellen:

Als we de vorige Pandas-bibliotheek aanvullen met het matplotlib-pakket, is het mogelijk om grafieken te tekenen voor de ontvangen gegevens. Het is voor het plotten in Python dat matplotlib verantwoordelijk is. Dit is vaak het eerste visualisatiepakket dat wordt gebruikt door beginnende Python-programmeurs, en de meegeleverde spiekbriefjes helpen je snel door de functionaliteit van deze bibliotheek te navigeren.

In de tweede spiekbrief vindt u meer voorbeelden van de visuele weergave van grafieken:

De Python-bibliotheek voor machine learning van Scikit-Learn is niet de gemakkelijkste om te leren, maar met spiekbriefjes wordt het principe van de werking ervan zo duidelijk mogelijk.

Schematische weergave:

Met theorie, voorbeelden en aanvullende materialen:

TensorFlow

Nog een bibliotheek voor machine learning, maar met zijn eigen functionaliteit en moeilijkheden in de waarneming. Hieronder vindt u een handig spiekbriefje voor het leren van TensorFlow.

Elke data-analyse-expert vraagt ​​zich af welke programmeertaal hij moet kiezen R of Python, schrijven ze? Om het beste antwoord op deze vraag te vinden, in de meeste gevallen de meest populaire Google-zoekmachine. Zonder de juiste antwoorden te vinden, worden potentiële kandidaten nooit experts in machine learning-technologieën of data-analyse. Dit artikel probeert de specifieke kenmerken van de R- en Python-talen uit te leggen voor hun gebruik bij de ontwikkeling van machine learning-technologieën.

Machine learning en datawetenschap zijn bloeiende en steeds groeiende segmenten van de geavanceerde technologieën van vandaag om verschillende problemen op te lossen. moeilijke problemen en uitdagingen bij de ontwikkeling van oplossingen en toepassingen. In dit opzicht hebben analisten en analyse-experts op wereldschaal de meeste kansen om hun sterke punten en capaciteiten toe te passen in technologieën zoals kunstmatige intelligentie, IoT en big data. Om nieuwe op te lossen uitdagende taken Experts en specialisten hebben een krachtige tool nodig voor het verwerken van enorme hoeveelheden gegevens, en er is een verscheidenheid aan machine learning-tools en bibliotheken ontwikkeld om de taken van het analyseren, herkennen en aggregeren van gegevens te automatiseren.

Bij de ontwikkeling van machine learning-bibliotheken nemen programmeertalen als R en Python het voortouw. Veel experts en analisten besteden tijd aan het kiezen vereiste taal. Wat is de geprefereerde programmeertaal voor machine learning-doeleinden?

Wat zijn de overeenkomsten tussen R en Python

  • Beide talen R en Python zijn open source programmeertalen. Een groot aantal leden van de programmeergemeenschap heeft bijgedragen aan de ontwikkeling van documentatie en de ontwikkeling van deze talen.
  • De talen kunnen worden gebruikt voor data-analyse, analyse en machine learning-projecten.
  • Beide hebben geavanceerde tools voor het voltooien van data science-projecten.
  • Analisten die liever in R en Python werken, krijgen bijna hetzelfde betaald.
  • Huidige versies van Python en R x.x

R en Python - de strijd van concurrenten

Historische excursie:

  • In 1991 stelde Guido Van Rossum, geïnspireerd door de ontwikkeling van C, Modula-3 en ABC, een nieuwe programmeertaal voor - Python.
  • In 1995 creëerden Ross Ihaka en Robert Gentleman de R-taal, die werd ontwikkeld langs de lijnen van de S-programmeertaal.

doelen:

  • Doel Python-ontwikkeling- creatie softwareproducten, vereenvoudigt het ontwikkelingsproces en zorgt voor leesbaarheid van de code.
  • Terwijl de R-taal voornamelijk is ontwikkeld voor gebruiksvriendelijke gegevensanalyse en voor het oplossen van complexe statistische problemen. Het is een taal van voornamelijk statistische oriëntatie.

Gemakkelijk te leren:

  • Door de leesbaarheid van de code is de Python-taal gemakkelijk te leren. Het is een beginnersvriendelijke taal die kan worden geleerd zonder eerdere programmeerervaring.
  • De R-taal is moeilijk, maar hoe langer je deze taal gebruikt bij het programmeren, hoe gemakkelijker het is om te leren en hoe effectiever het is bij het oplossen van complexe statistische formules. Voor ervaren programmeurs is de R-taal een optie ga naar.

Gemeenschappen:

  • Python heeft ondersteuning verschillende gemeenschappen, waarvan de leden de taal voor geavanceerde toepassingen ontwikkelen. Programmeurs en ontwikkelaars zijn, net als StackOverflow-leden, actieve leden van de Python-community.
  • De R-taal wordt ook ondersteund door leden van een diverse gemeenschap via mailinglijsten, documentatie van gebruikersbijdragen, enz. De meeste statistici, onderzoekers en data-analyse-experts zijn actief betrokken bij de ontwikkeling van de taal.

Flexibiliteit:

  • Python is een op productiviteit gerichte taal, dus het is flexibel genoeg om een ​​verscheidenheid aan toepassingen te ontwikkelen. Voor het ontwikkelen van grootschalige toepassingen bevat Python: verschillende modules en bibliotheken.
  • De R-taal is ook flexibel in het ontwikkelen van complexe formules, het uitvoeren van statistische tests, datavisualisatie, enz. Het omvat een verscheidenheid aan kant-en-klare pakketten.

Sollicitatie:

  • Python is een leider in applicatieontwikkeling. Het wordt gebruikt om website-ontwikkeling en game-ontwikkeling te ondersteunen, in data science.
  • De R-taal wordt voornamelijk gebruikt bij de ontwikkeling van data-analyseprojecten die zich richten op statistiek en visualisatie.

Beide talen - R en Python - hebben voor- en nadelen. In de meeste gevallen zijn dit specifiek-centrische talen, aangezien R zich richt op statistieken en visualisatie, en Python zich richt op het gemak van ontwikkeling van elke applicatie.

Op basis hiervan kan R vooral worden gebruikt voor onderzoek naar wetenschappelijke instituten, gedurende statistische analyses en datavisualisatie. Aan de andere kant wordt Python gebruikt om het proces van het verbeteren van programma's, gegevensverwerking, enz. te vereenvoudigen. De R-taal kan zeer productief zijn voor statistici die werken op het gebied van gegevensanalyse, terwijl Python beter geschikt is voor programmeurs en ontwikkelaars die producten maken voor datawetenschappers. .