Πώς να ξεκινήσετε με τη Μηχανική Εκμάθηση σε περίπου 10 λεπτά

Με την άνοδο της Μηχανικής Μάθησης σε βιομηχανίες, η ανάγκη για ένα εργαλείο που μπορεί να σας βοηθήσει να επαναλάβετε γρήγορα τη διαδικασία έχει καταστεί ζωτικής σημασίας. Η Python, ένα ανερχόμενο αστέρι στην τεχνολογία Machine Learning, είναι συχνά η πρώτη επιλογή για να σας φέρει την επιτυχία. Είναι λοιπόν απαραίτητος ένας οδηγός για τη Μηχανική Εκμάθηση με Python.

Εισαγωγή στη Μηχανική Εκμάθηση με Python

Λοιπόν, γιατί Python; Σύμφωνα με την εμπειρία μου, η Python είναι μια από τις ευκολότερες γλώσσες προγραμματισμού που μπορεί να μάθει. Υπάρχει ανάγκη να επαναληφθεί γρήγορα η διαδικασία, και ο επιστήμονας δεδομένων δεν χρειάζεται να έχει βαθιά γνώση της γλώσσας, καθώς μπορούν να το κάνουν πραγματικά γρήγορο.

Πόσο εύκολο;

for anything in the_list: print(anything)

Αυτό είναι εύκολο . Η σύνταξη σχετίζεται στενά με τα αγγλικά (ή την ανθρώπινη γλώσσα, όχι με τη μηχανή). Και δεν υπάρχουν ανόητα σγουρά αγκύλες που μπερδεύουν τους ανθρώπους. Έχω έναν συνάδελφο που είναι στη Διασφάλιση Ποιότητας και όχι Μηχανικός Λογισμικού και μπορεί να γράψει κώδικα Python μέσα σε μια μέρα σε επίπεδο παραγωγής. (Στ 'αλήθεια!)

Έτσι, οι οικοδόμοι των βιβλιοθηκών που θα συζητήσουμε παρακάτω επέλεξαν την Python για την επιλογή της γλώσσας. Και ως Αναλυτής Δεδομένων και Επιστήμονας, μπορούμε απλά να χρησιμοποιήσουμε τα αριστουργήματά τους για να μας βοηθήσουν να ολοκληρώσουμε τις εργασίες. Αυτές είναι οι απίστευτες βιβλιοθήκες, που είναι απαραίτητες για τη μηχανική εκμάθηση με την Python .

  1. Numpy

Η διάσημη βιβλιοθήκη αριθμητικής ανάλυσης. Θα σας βοηθήσει να κάνετε πολλά πράγματα, από τον υπολογισμό του μέσου όρου της διανομής δεδομένων έως την επεξεργασία πολυδιάστατων συστοιχιών.

2. Πάντες

Για την επεξεργασία αρχείων CSV. Φυσικά, θα χρειαστεί να επεξεργαστείτε μερικούς πίνακες και να δείτε στατιστικά στοιχεία, και αυτό είναι το σωστό εργαλείο που θέλετε να χρησιμοποιήσετε.

3. Matplotlib

Αφού αποθηκεύσετε τα δεδομένα στα πλαίσια δεδομένων του Pandas, ίσως χρειαστείτε κάποιες οπτικοποιήσεις για να κατανοήσετε περισσότερα σχετικά με τα δεδομένα. Οι εικόνες είναι ακόμα καλύτερες από χιλιάδες λέξεις.

4. Θαλασσοπόρος

Αυτό είναι επίσης ένα άλλο εργαλείο οπτικοποίησης, αλλά εστιάζεται περισσότερο στη στατιστική οπτικοποίηση. Πράγματα όπως ιστογράμματα ή γραφήματα πίτας ή καμπύλες ή ίσως πίνακες συσχέτισης.

5. Scikit-Μάθετε

Αυτό είναι το τελευταίο αφεντικό της Μηχανικής Μάθησης με την Python. Η ΕΚΠΑΙΔΕΥΤΙΚΗ Μηχανική Εκμάθηση με τον Python είναι αυτός ο τύπος. Scikit-Μάθετε. Όλα τα πράγματα που χρειάζεστε από αλγόριθμους έως βελτιώσεις είναι εδώ.

6. Tensorflow και Pytorch

Δεν μιλάω πολύ για αυτά τα δύο. Αλλά αν σας ενδιαφέρει η βαθιά μάθηση, ρίξτε μια ματιά σε αυτά, θα αξίζει τον χρόνο σας. (Θα δώσω ένα άλλο σεμινάριο για την Deep Learning την επόμενη φορά, μείνετε συντονισμένοι!)

Έργα Python Machine Learning

Φυσικά, η ανάγνωση και η μόνη μελέτη δεν θα σας φέρουν εκεί που πρέπει να πάτε. Χρειάζεστε πραγματική πρακτική. Όπως είπα στο ιστολόγιό μου, η εκμάθηση των εργαλείων είναι άσκοπη αν δεν μεταβείτε στα δεδομένα. Έτσι, σας παρουσιάζω ένα μέρος όπου μπορείτε εύκολα να βρείτε Python Machine Learning Projects.

Το Kaggle είναι μια πλατφόρμα όπου μπορείτε να βυθιστείτε απευθείας στα δεδομένα. Θα λύσετε έργα και θα γίνετε πολύ καλοί στη Μηχανική Εκμάθηση. Κάτι που μπορεί να σας κάνει να σας ενδιαφέρει περισσότερο: οι διαγωνισμοί Μηχανικής Μάθησης που κατέχει μπορεί να δώσουν ένα έπαθλο έως 100.000 $. Και ίσως θελήσετε να δοκιμάσετε την τύχη σας. Χαχα.

Όμως, το πιο σημαντικό πράγμα δεν είναι τα χρήματα - είναι πραγματικά ένα μέρος όπου μπορείτε να βρείτε Μηχανική Εκμάθηση με έργα Python. Υπάρχουν πολλά έργα που μπορείτε να δοκιμάσετε. Αλλά αν είστε αρχάριος, και υποθέτω ότι είστε, θα θελήσετε να συμμετάσχετε σε αυτόν τον διαγωνισμό.

Ακολουθεί ένα παράδειγμα έργου που θα χρησιμοποιήσουμε στον παρακάτω οδηγό:

Τιτανικός: Μηχανική εκμάθηση από καταστροφή

Ναι, ο περίφημος Τιτανικός. Μια τραγική καταστροφή το 1912, που πήρε τη ζωή 1502 ανθρώπων από 2224 επιβάτες και πλήρωμα. Αυτός ο διαγωνισμός Kaggle (ή μπορώ να πω το φροντιστήριο) σας δίνει τα πραγματικά δεδομένα για την καταστροφή. Και το καθήκον σας είναι να εξηγήσετε τα δεδομένα, ώστε να μπορείτε να προβλέψετε εάν ένα άτομο επέζησε ή όχι κατά τη διάρκεια του συμβάντος.

Μηχανική εκμάθηση με Python Tutorial

Πριν πάμε βαθιά στα δεδομένα του Τιτανικού, ας εγκαταστήσουμε μερικά εργαλεία που χρειάζεστε.

Φυσικά, Python. Πρέπει πρώτα να το εγκαταστήσετε από τον ιστότοπο της Python offfical. Πρέπει να εγκαταστήσετε την έκδοση 3.6+ για να ενημερώνεστε για τις βιβλιοθήκες.

Μετά από αυτό, πρέπει να εγκαταστήσετε όλες τις βιβλιοθήκες μέσω Python pip. Το Pip θα πρέπει να εγκατασταθεί αυτόματα με τη διανομή του Python που μόλις κατεβάσατε.

Στη συνέχεια, εγκαταστήστε τα πράγματα που χρειάζεστε μέσω pip. Ανοίξτε το τερματικό, τη γραμμή εντολών ή το Powershell και γράψτε τα εξής:

pip install numpypip install pandaspip install matplotlibpip install seabornpip install scikit-learnpip install jupyter

Λοιπόν, όλα φαίνονται καλά. Αλλά περιμένετε, τι είναι ο jupyter; Ο Jupyter σημαίνει Julia, Python και R, εξ ου και Jupytr. Αλλά είναι ένα περίεργο σύνθετο λέξεων, οπότε το άλλαξαν σε απλά Jupyter. Είναι ένα διάσημο σημειωματάριο όπου μπορείτε να γράψετε κώδικα Python διαδραστικά.

Απλώς πληκτρολογήστε jupyter notebook στο τερματικό σας και θα ανοίξετε μια σελίδα προγράμματος περιήγησης όπως αυτή:

Γράψτε τον κώδικα μέσα στο πράσινο ορθογώνιο και μπορείτε να γράψετε και να αξιολογήσετε τον κώδικα Python διαδραστικά.

Τώρα έχετε εγκαταστήσει όλα τα εργαλεία. Ας ξεκινήσουμε!

Εξερεύνηση δεδομένων

Το πρώτο βήμα είναι να εξερευνήσετε τα δεδομένα. Πρέπει να κατεβάσετε τα δεδομένα από τη σελίδα Τιτανικού στο Kaggle. Στη συνέχεια, τοποθετήστε τα εξαγόμενα δεδομένα μέσα σε ένα φάκελο όπου ξεκινάτε το σημειωματάριό σας Jupyter.

Στη συνέχεια, εισαγάγετε τις απαραίτητες βιβλιοθήκες:

import numpy as np import pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport warningswarnings.filterwarnings('ignore')%matplotlib inline

Στη συνέχεια, φορτώστε τα δεδομένα:

train_df=pd.read_csv("train.csv")train_df.head()

Θα δείτε κάτι τέτοιο:

Αυτά είναι τα δεδομένα μας. Έχει τις ακόλουθες στήλες:

  1. PassengerId, το αναγνωριστικό του επιβάτη
  2. Επιβίωσε, είτε επέζησε είτε όχι
  3. Pclass, η κατηγορία της υπηρεσίας, ίσως 1 είναι οικονομία, 2 είναι επιχείρηση και 3 είναι πρώτης τάξεως
  4. Όνομα, το όνομα του επιβάτη
  5. Φύλο
  6. Ηλικία
  7. Sibsp, ή αδέλφια και σύζυγοι, αριθμός αδελφών και συζύγων στο πλοίο
  8. Parch, ή γονείς και παιδιά, αριθμός αυτών επί του σκάφους
  9. Εισιτήριο, λεπτομέρεια εισιτηρίου
  10. Cabin, their cabin. NaN means unknown
  11. Embarked, the origin of embarkation, S for Southampton, Q for Queenstown, C for Cherbourg

While exploring data, we often find missing data. Let’s see them:

def missingdata(data): total = data.isnull().sum().sort_values(ascending = False) percent = (data.isnull().sum()/data.isnull().count()*100).sort_values(ascending = False) ms=pd.concat([total, percent], axis=1, keys=['Total', 'Percent']) ms= ms[ms["Percent"] > 0] f,ax =plt.subplots(figsize=(8,6)) plt.xticks(rotation='90') fig=sns.barplot(ms.index, ms["Percent"],color="green",alpha=0.8) plt.xlabel('Features', fontsize=15) plt.ylabel('Percent of missing values', fontsize=15) plt.title('Percent missing data by feature', fontsize=15) return ms
missingdata(train_df)

We will see a result like this:

The cabin, age, and embarked data has some missing values. And cabin information is largely missing. We need to do something about them. This is what we call Data Cleaning.

Data Cleaning

This is what we use 90% of the time. We will do Data Cleaning a lot for every single Machine Learning project. When the data is clean, we can easily jump ahead to the next step without worrying about anything.

The most common technique in Data Cleaning is filling missing data. You can fill the data missing with Mode, Mean, or Median. There is no absolute rule on these choices — you can try to choose one after another and see the performance. But, for a rule of thumb, you can only use mode for categorized data, and you can use median or mean for continuous data.

So let’s fill the embarkation data with Mode and the Age data with median.

train_df['Embarked'].fillna(train_df['Embarked'].mode()[0], inplace = True)train_df['Age'].fillna(train_df['Age'].median(), inplace = True)

The next important technique is to just remove the data, especially for largely missing data. Let’s do it for the cabin data.

drop_column = ['Cabin']train_df.drop(drop_column, axis=1, inplace = True)

Now we can check the data we have cleaned.

print('check the nan value in train data')print(train_df.isnull().sum())

Perfect! No missing data found. Means the data has been cleaned.

Feature Engineering

Now we have cleaned the data. The next thing we can do is Feature Engineering.

Feature Engineering is basically a technique for finding Feature or Data from the currently available data. There are several ways to do this technique. More often, it is about common sense.

Let’s take a look at the Embarked data: it is filled with Q, S, or C. The Python library will not be able to process this, since it is only able to process numbers. So you need to do something called One Hot Vectorization, changing the column into three columns. Let’s say Embarked_Q, Embarked_S, and Embarked_C which are filled with 0 or 1 whether the person embarked from that harbor or not.

The other example is SibSp and Parch. Maybe there is nothing interesting in both of those columns, but you might want to know how big the family was of the passenger who boarded in the ship. You might assume that if the family was bigger, then the chance of survival would increase, since they could help each other. On other hand, solo people would’ve had it hard.

So you want to create another column called family size, which consists of sibsp + parch + 1 (the passenger themself).

The last example is called bin columns. It is a technique which creates ranges of values to group several things together, since you assume it is hard to differentiate things with similar value. For example, Age. For a person aged 5 and 6, is there any significant difference? or for person aged 45 and 46, is there any big difference?

That’s why we create bin columns. Maybe for age, we will create 4 bins. Children (0–14 years), Teenager (14–20), Adult (20–40), and Elders (40+)

Let’s code them:

all_data = train_df
for dataset in all_data : dataset['FamilySize'] = dataset['SibSp'] + dataset['Parch'] + 1
import re# Define function to extract titles from passenger namesdef get_title(name): title_search = re.search(' ([A-Za-z]+)\.', name) # If the title exists, extract and return it. if title_search: return title_search.group(1) return ""# Create a new feature Title, containing the titles of passenger namesfor dataset in all_data: dataset['Title'] = dataset['Name'].apply(get_title)# Group all non-common titles into one single grouping "Rare"for dataset in all_data: dataset['Title'] = dataset['Title'].replace(['Lady', 'Countess','Capt', 'Col','Don', 'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer', 'Dona'], 'Rare')
dataset['Title'] = dataset['Title'].replace('Mlle', 'Miss') dataset['Title'] = dataset['Title'].replace('Ms', 'Miss') dataset['Title'] = dataset['Title'].replace('Mme', 'Mrs')
for dataset in all_data: dataset['Age_bin'] = pd.cut(dataset['Age'], bins=[0,14,20,40,120], labels=['Children','Teenage','Adult','Elder'])
for dataset in all_data: dataset['Fare_bin'] = pd.cut(dataset['Fare'], bins=[0,7.91,14.45,31,120], labels ['Low_fare','median_fare', 'Average_fare','high_fare']) traindf=train_dffor dataset in traindf: drop_column = ['Age','Fare','Name','Ticket'] dataset.drop(drop_column, axis=1, inplace = True)
drop_column = ['PassengerId']traindf.drop(drop_column, axis=1, inplace = True)traindf = pd.get_dummies(traindf, columns = ["Sex","Title","Age_bin","Embarked","Fare_bin"], prefix=["Sex","Title","Age_type","Em_type","Fare_type"])

Now, you have finished all the features. Let’s take a look into the correlation for each feature:

sns.heatmap(traindf.corr(),annot=True,cmap='RdYlGn',linewidths=0.2) #data.corr()-->correlation matrixfig=plt.gcf()fig.set_size_inches(20,12)plt.show()

Οι συσχετίσεις με την τιμή 1 σημαίνει ότι συσχετίζονται θετικά, -1 σημαίνει ότι συσχετίζονται αρνητικά . Για παράδειγμα, το φύλο αρσενικό και το φύλο θα συσχετιστούν αρνητικά, καθώς οι επιβάτες έπρεπε να ταυτοποιηθούν ως το ένα ή το άλλο φύλο. Εκτός από αυτό, μπορείτε να δείτε ότι τίποτα δεν σχετίζεται με οτιδήποτε άλλο εκτός από αυτά που δημιουργήθηκαν μέσω της μηχανικής χαρακτηριστικών. Αυτό σημαίνει ότι είμαστε καλοί.

Τι θα συμβεί αν κάτι σχετίζεται πολύ με κάτι άλλο; Μπορούμε να εξαλείψουμε ένα από αυτά, καθώς η προσθήκη πληροφοριών nother μέσω νέας στήλης δεν θα δώσει στο σύστημα νέες πληροφορίες, καθώς και οι δύο είναι ακριβώς οι ίδιες.

Μηχανική εκμάθηση με Python

Τώρα φτάσαμε στην κορυφή του σεμιναρίου: Μοντελοποίηση μηχανικής μάθησης.

from sklearn.model_selection import train_test_split #for split the datafrom sklearn.metrics import accuracy_score #for accuracy_scorefrom sklearn.model_selection import KFold #for K-fold cross validationfrom sklearn.model_selection import cross_val_score #score evaluationfrom sklearn.model_selection import cross_val_predict #predictionfrom sklearn.metrics import confusion_matrix #for confusion matrixall_features = traindf.drop("Survived",axis=1)Targeted_feature = traindf["Survived"]X_train,X_test,y_train,y_test = train_test_split(all_features,Targeted_feature,test_size=0.3,random_state=42)X_train.shape,X_test.shape,y_train.shape,y_test.shape

Μπορείτε να επιλέξετε πολλούς αλγόριθμους που περιλαμβάνονται στη βιβλιοθήκη scikit-learn.

  1. Λογιστική παλινδρόμηση
  2. Τυχαίο δάσος
  3. SVM
  4. Κοντινότερος γείτονας
  5. Naive Bayes
  6. Decision Trees
  7. AdaBoost
  8. LDA
  9. Gradient Boosting

You might be overwhelmed trying to figure out what is what. Don’t worry, just treat is as a black box: choose one with the best performance. (I will create a whole article on these algorithms later.)

Let’s try it with my favorite one: the Random Forest Algorithm

from sklearn.ensemble import RandomForestClassifiermodel = RandomForestClassifier(criterion='gini', n_estimators=700, min_samples_split=10,min_samples_leaf=1, max_features="auto",oob_score=True, random_state=1,n_jobs=-1)model.fit(X_train,y_train)prediction_rm=model.predict(X_test)print('--------------The Accuracy of the model----------------------------')print('The accuracy of the Random Forest Classifier is', round(accuracy_score(prediction_rm,y_test)*100,2))kfold = KFold(n_splits=10, random_state=22) # k=10, split the data into 10 equal partsresult_rm=cross_val_score(model,all_features,Targeted_feature,cv=10,scoring='accuracy')print('The cross validated score for Random Forest Classifier is:',round(result_rm.mean()*100,2))y_pred = cross_val_predict(model,all_features,Targeted_feature,cv=10)sns.heatmap(confusion_matrix(Targeted_feature,y_pred),annot=True,fmt='3.0f',cmap="summer")plt.title('Confusion_matrix', y=1.05, size=15)

Wow! It gives us 83% accuracy. That’s good enough for our first time.

The cross validated score means a K Fold Validation method. If K = 10, it means you split the data in 10 variations and compute the mean of all scores as the final score.

Fine Tuning

Now you are done with the steps in Machine Learning with Python. But, there is one more step which can bring you better results: fine tuning. Fine tuning means finding the best parameter for Machine Learning Algorithms. If you see the code for random forest above:

model = RandomForestClassifier(criterion='gini', n_estimators=700, min_samples_split=10,min_samples_leaf=1, max_features="auto",oob_score=True, random_state=1,n_jobs=-1)

Υπάρχουν πολλές παράμετροι που πρέπει να ορίσετε. Παρεμπιπτόντως, αυτές είναι οι προεπιλογές. Και μπορείτε να αλλάξετε τις παραμέτρους όπως θέλετε. Φυσικά, θα χρειαστεί πολύς χρόνος.

Μην ανησυχείτε - υπάρχει ένα εργαλείο που ονομάζεται Grid Search , το οποίο βρίσκει αυτόματα τις βέλτιστες παραμέτρους. Ακούγεται υπέροχο, έτσι;

# Random Forest Classifier Parameters tunning model = RandomForestClassifier()n_estim=range(100,1000,100)
## Search grid for optimal parametersparam_grid = {"n_estimators" :n_estim}
model_rf = GridSearchCV(model,param_grid = param_grid, cv=5, scoring="accuracy", n_jobs= 4, verbose = 1)
model_rf.fit(train_X,train_Y)
# Best scoreprint(model_rf.best_score_)
#best estimatormodel_rf.best_estimator_

Λοιπόν, μπορείτε να το δοκιμάσετε μόνοι σας. Και διασκεδάστε με το Machine Learning.

συμπέρασμα

Πώς ήταν? Δεν φαίνεται πολύ δύσκολο; Η μηχανική εκμάθηση με Python είναι εύκολη. Όλα έχουν σχεδιαστεί για εσάς. Μπορείτε απλά να κάνετε τη μαγεία. Και φέρτε την ευτυχία στους ανθρώπους.

Αυτό το κομμάτι κυκλοφόρησε αρχικά στο blog μου στο thedatamage.com