Начнем с простой задачи.
Постановка задачи
Учитывая набор данных, состоящий из
- Имя
- Годы опыта
- Оплата труда
Создайте модель машинного обучения, которая могла бы предсказывать зарплату с учетом опыта.
Набор данных
Содержимое набора данных в формате 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()