Як розпочати машинне навчання приблизно за 10 хвилин

З розвитком машинного навчання в галузях промисловості потреба в інструменті, який допоможе вам швидко пройти процес, стала життєво важливою. Python, висхідна зірка в технології машинного навчання, часто є першим вибором, який приносить вам успіх. Отже, посібник з машинного навчання за допомогою Python дійсно необхідний.

Вступ до машинного навчання за допомогою Python

Отже, чому саме Python? З мого досвіду, Python - одна з найпростіших для вивчення мов програмування. Існує необхідність швидко повторити процес, і вчений-обробник даних не повинен глибоко знати мову, оскільки вони можуть швидко це зрозуміти.

Як легко

for anything in the_list: print(anything)

Це просто . Синтаксис тісно пов’язаний з англійською (або людською мовою, а не машиною). І немає дурних фігурних дужок, які заплутують людей. У мене є колега, яка займається системою забезпечення якості, а не інженером-програмістом, і вона може писати код Python протягом доби на виробничому рівні. (Насправді!)

Тож розробники бібліотек, про які ми поговоримо нижче, обрали Python для вибору мови. А як аналітик даних і науковець ми можемо просто використовувати їх шедеври, щоб допомогти нам виконати завдання. Це неймовірні бібліотеки, необхідні для машинного навчання з Python .

  1. Numpy

Знаменита бібліотека цифрового аналізу. Це допоможе вам зробити багато речей, від обчислення медіани розподілу даних до обробки багатовимірних масивів.

2. Панди

Для обробки файлів CSV. Звичайно, вам потрібно буде обробити деякі таблиці та переглянути статистику, і це правильний інструмент, який ви хочете використовувати.

3. Матплотліб

Після того, як дані зберігаються у фреймах даних Pandas, можливо, вам знадобляться деякі візуалізації, щоб зрозуміти більше про дані. Зображення все-таки кращі за тисячі слів.

4. Морський народжений

Це також ще один інструмент візуалізації, але більше зосереджений на статистичній візуалізації. Такі речі, як гістограми, кругові діаграми, криві або таблиці кореляції.

5. Scikit-Learn

Це останній бос машинного навчання за допомогою Python. ТАК ЗВАНИЙ машинне навчання з Python - ось цей хлопець. Scikit-Learn. Тут є все необхідне, від алгоритмів до вдосконалень.

6. Tensorflow і Pytorch

Я не надто багато кажу про цих двох. Але якщо ви зацікавлені в глибокому навчанні, погляньте на них, це буде варте вашого часу. (Наступного разу я прочитаю ще один посібник про глибоке навчання, слідкуйте!)

Проекти машинного навчання Python

Звичайно, лише читання та навчання не приведуть вас туди, куди вам потрібно йти. Вам потрібна фактична практика. Як я вже говорив у своєму блозі, вивчати інструменти безглуздо, якщо ви не вникаєте в дані. Отже, я знайомлю вас із місцем, де ви можете легко знайти проекти машинного навчання Python.

Kaggle - це платформа, де ви можете зануритися безпосередньо в дані. Ви будете вирішувати проекти та отримувати справді хороші знання в машинному навчанні. Щось, що може змусити вас більше зацікавитись цим: змагання з машинного навчання, які вони проводять, можуть призвати до 100 000 доларів. І ви можете спробувати щастя. Ха-ха.

Але найголовніше - це не гроші - це справді місце, де можна знайти машинне навчання за допомогою проектів Python. Є багато проектів, які ви можете спробувати. Але якщо ви новачок, і я припускаю, що є, ви захочете долучитися до цього змагання.

Ось приклад проекту, який ми використаємо в наведеному нижче підручнику:

"Титанік": машинне навчання від катастрофи

Так, сумнозвісний Титанік. Трагічна катастрофа в 1912 році, яка забрала життя 1502 людей з 2224 пасажирів та екіпажу. Цей конкурс Kaggle (або я можу сказати навчальний посібник) дає вам реальні дані про катастрофу. І ваше завдання - пояснити дані, щоб ви могли передбачити, вижив чи інший під час інциденту.

Машинне навчання за допомогою підручника з Python

Перш ніж заглибитися в дані «Титаніка», давайте встановимо деякі необхідні інструменти.

Звичайно, Python. Спочатку його потрібно встановити з офіційного веб-сайту Python. Вам потрібно встановити версію 3.6+, щоб бути в курсі бібліотек.

Після цього вам потрібно встановити всі бібліотеки через Python pip. Pip слід встановлювати автоматично з дистрибутивом Python, який ви щойно завантажили.

Потім встановіть потрібні речі за допомогою pip. Відкрийте термінал, командний рядок або Powershell і напишіть наступне:

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

Ну, все виглядає добре. Але почекайте, що таке jupyter? Юпітер розшифровується як Джулія, Пітон і Р, отже, Юпітр. Але це дивна комбінація слів, тому вони змінили його просто на Юпітера. Це відомий блокнот, де ви можете писати код Python інтерактивно.

Просто введіть блокнот jupyter у своєму терміналі, і ви відкриєте сторінку браузера, як це:

Напишіть код всередині зеленого прямокутника, і ви зможете писати та оцінювати код Python інтерактивно.

Тепер ви встановили всі інструменти. Ходімо!

Дослідження даних

Першим кроком є ​​дослідження даних. Вам потрібно завантажити дані зі сторінки Titanic у 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. Клас, клас послуги, можливо, 1 - це економіка, 2 - бізнес, 3 - перший клас
  4. Ім'я, ім'я пасажира
  5. Секс
  6. Вік
  7. Sibsp, або брати та сестри та подружжя, кількість братів і сестер та подружжя на борту
  8. Перч, або батьки та діти, їх кількість на борту
  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 означає високу кореляцію негативно . Наприклад, стать чоловічої статі та жінки жіночої статі будуть негативно співвідноситися, оскільки пасажири повинні були визначити одну або іншу стать. Окрім цього, ви можете бачити, що ніщо не пов'язане ні з чим надзвичайно, крім тих, що створені за допомогою інженерної розробки. Це означає, що нам добре йти.

Що станеться, якщо щось сильно корелює з чимось іншим? Ми можемо усунути один з них, оскільки додавання жодної інформації через новий стовпець не дасть системі нової інформації, оскільки обидва вони абсолютно однакові.

Машинне навчання за допомогою 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. K Найближчий сусід
  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)

There are many parameters you need to set. These are the defaults, by the way. And you can change the parameters however you want. But of course, it will takes a lot of time.

Don’t worry — there is a tool called Grid Search, which finds the optimal parameters automatically. Sounds great, right?

# 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_

Well, you can try it out for yourself. And have fun with Machine Learning.

Conclusion

How was it? It doesn’t seem very difficult does it? Machine Learning with Python is easy. Everything has been laid out for you. You can just do the magic. And bring happiness to people.

This piece was originally released on my blog at thedatamage.com