Начнем с простой задачи.

Постановка задачи

Учитывая набор данных, состоящий из

  • Имя
  • Годы опыта
  • Оплата труда

Создайте модель машинного обучения, которая могла бы предсказывать зарплату с учетом опыта.

Набор данных

Содержимое набора данных в формате csv

Name,YearsExperience,Salary
Tiernan,1.1,39343.00
Beatrix,1.3,46205.00
Wendy,1.5,37731.00
Hilary,2.0,43525.00
Oscar,2.2,39891.00
Usman,2.9,56642.00
Roxy,3.0,60150.00
Archibald,3.2,54445.00
Vernon,3.2,64445.00
Donna,3.7,57189.00
Ellie,3.9,63218.00
Keanan,4.0,55794.00
Xanthe,4.0,56957.00
Ezmae,4.1,57081.00
Huma,4.5,61111.00
Valentina,4.9,67938.00
Seamus,5.1,66029.00
Aarav,5.3,83088.00
Kaylee,5.9,81363.00
Sofie,6.0,93940.00
Pheobe,6.8,91738.00
Whitney,7.1,98273.00
Manpreet,7.9,101302.00
Leah,8.2,113812.00
Cydney,8.7,109431.00
Allan,9.0,105582.00
Fatimah,9.5,116969.00
Niall,9.6,112635.00
Alannah,10.3,122391.00
Misty,10.5,121872.00

Программа из 5 шагов

Давайте начнем с пятиступенчатой ​​программы.

Шаг 1. Изучите данные

Важно знать, какую информацию содержат данные. В этом примере все просто.

Но в более сложных случаях использования важно знать, какие поля существуют в наборе данных, что означает каждое поле и т. Д.

Name,YearsExperience,Salary
Tiernan,1.1,39343.00
Beatrix,1.3,46205.00

Шаг 2: предварительная обработка

Этот шаг включает в себя

  • Удаление столбцов, которые могут не потребоваться
  • Заполните пропущенные значения
  • Преобразование категориальных данных в числовую форму: машины понимают только числа. Если есть столбец типа «Строка», его необходимо преобразовать в числовую форму, прежде чем можно будет использовать в дальнейшем. В этом примере это не применимо

Напишем код для предварительной обработки

import pandas as pdimport matplotlib.pyplot as plt
dataset = pd.read_csv('dataset.csv') # read dataset
print(dataset.describe()) # check for missing values
dataset.drop(0) # dropping the column 'Name'

Шаг 3. Анализируйте

Этот шаг включает в себя выяснение

  • Что вы пытаетесь предсказать - Зарплата. Это также называется целью или целью прогнозирования. (y)
  • На каких свойствах вы основываете свой прогноз - лет опыта. Это также называется набором функций или функциями. (X)
  • Создание данных для обучения и тестирования с использованием метода scikit train_test_split

Давайте разделим набор данных на цель и функции и создадим обучающие / тестовые данные.

X = dataset.iloc[:, :-1].values # remove last column i.e salary
y = dataset.iloc[:, 1].values # include the target
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 1/3, random_state = 0)

Шаг 4: Определите модель

В этом случае я буду использовать модель LinearRegression. Выбор правильной модели важен, но обсуждение этого вопроса выходит за рамки данной статьи.

Давайте определим модель и сопоставим ее с данными обучения.

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)

Шаг 5: прогноз

Теперь до последнего шага. Наша модель готова и обучена на обучающих данных.

Давайте проверим его прогнозы

y_pred = regressor.predict(X_test)

Давайте визуализируем, как наша модель прогнозирует зарплату на основе опыта использования matplotlib.

plt.scatter(X_test, y_test, color='red')
plt.plot(X_test, y_pred, color='blue')
plt.title('Salary vs Experience (Test Set)')
plt.xlabel('Years of Experience')
plt.ylabel('Salary')
plt.show()

Полный код

import pandas as pd
import matplotlib.pyplot as plt
# load data and pre processing
dataset = pd.read_csv('Salary_Data.csv') # read dataset
print(dataset.describe()) # check for missing values
dataset.drop(0) # dropping the column 'Name'
# select target and features
X = dataset.iloc[:, :-1].values # remove last column i.e salary
y = dataset.iloc[:, 1].values # include the target
# create train and test data
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 1/3, random_state = 0)
# define and fit
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)
# predict
y_pred = regressor.predict(X_test)
# visualize
plt.scatter(X_test, y_test, color='red')
plt.plot(X_test, y_pred, color='blue')
plt.title('Salary vs Experience (Test Set)')
plt.xlabel('Years of Experience')
plt.ylabel('Salary')
plt.show()