Недавно я узнал о машинном обучении, и мне трудно начать. Раньше я изучал видео г-на Ву Энда и обнаружил, что есть еще много моментов, которые трудно понять. Не так давно вышел китайский перевод «Машинного обучения от А до Я», и речь учителя была очень проста для понимания, поэтому я начал следить за ней.
Для систематизации полученных знаний, а также в качестве самоконтроля, я организую более систематизированные точки знаний на блоге. Соответствующий код также будет синхронизирован с github.
Весь следующий код написан на Python, а для предварительной обработки данных в основном используется модуль sklearn.preprocessing [СК Learn.apachecai.org/cai/0.19.0/no…]
содержание
В этой части машинного обучения я в основном говорю о предварительной обработке данных.
1. Импортируйте стандартную библиотеку
- Numpy: содержит множество математических методов, необходимых для машинного обучения.
- matplotlib.pyplot: в основном используется для построения графиков
- pandas: импортировать наборы данных и выполнять серию обработок наборов данных
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
2. Импортируйте набор данных
Параметры в массиве iloc: левая часть запятой указывает количество строк, правая часть запятой указывает количество столбцов, а двоеточие указывает, что выбраны все строки или столбцы
# Import the dataset
dataset = pd.read_csv('Data.csv')
X = dataset.iloc[:,:-1].values
y = dataset.iloc[:,3].values
3. Отсутствующие данные
Общие методы работы с отсутствующими данными включают заполнение средним значением, медианное заполнение и заполнение мод. Вы можете выбрать среди необязательных параметров стратегии в классе Imputer.Класс Imputer в основном используется для обработки отсутствующих данных. Ось параметров:
- ось = 0 взять среднее значение столбца
- ось = 1 взять среднее значение строки
Стратегия параметров: стратегия: строка, необязательно (по умолчанию = "среднее") Стратегия вменения.
- If "mean", then replace missing values using the mean along the axis.
- If "median", then replace missing values using the median along the axis.
- If "most_frequent", then replace missing using the most frequent value along the axis.
# Taking care of missing data
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values="NaN",strategy="mean",axis=0)
imputer.fit(X[:,1:3]) #代表1和2
X[:,1:3] = imputer.transform(X[:,1:3])
4. Категориальные данные
4.1 Кодировка тегов
Что он делает: Преобразует текст в числа.
Недостатки: В начале нет числового различия между разными национальностями.После преобразования разных стран в числовые значения 0, 1 и 2, есть размеры для разных классов, поэтому сортируются разные классы.
Решение: однократное кодирование (фиктивное кодирование)
4.2. Горячее кодирование (фиктивное кодирование)
# Encoding categorical data
from sklearn.preprocessing import LabelEncoder,OneHotEncoder
labelencoder_X = LabelEncoder()
X[:, 0] = labelencoder_X.fit_transform(X[:,0])
onehotencoder = OneHotEncoder(categorical_features = [0])
X = onehotencoder.fit_transform(X).toarray()
labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)
# Encode labels with value between 0 and n_classes-1(将不同组的名称转换为数字)
5. Разделите набор данных на обучающий набор и тестовый набор.
- test_size: от 0 до 1, обычно значение по умолчанию 0,25, лучше 0,2 или 0,25.
- random_state: определяет, как генерируются случайные числа
# splitting dataset into Training set and Test set
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2,random_state=0)
6. Масштабирование функций
Зачем использовать масштабирование данных?
Евклидово расстояние (длина отрезка между двумя точками) очень важно во многих алгоритмах машинного обучения.
Масштабируйте данные разных порядков до одного и того же порядка. Если не выполнять масштабирование характеристик, влияние возраста на сравнение зарплат станет очень незначительным.
Чтобы решить эту проблему, нам нужно масштабировать Возраст и Зарплату до одного порядка.
6.1 Стандартизация
Полученные новые данные имеют среднее значение 0 и дисперсию 1. Используется в машинах опорных векторов, логистической регрессии, нейронных сетях.
# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)
6.2 Нормализация
Приведите все значения между 0 и 1
import sklearn.preprocessing as sp
mms = sp.MinMaxScaler(feature_range=(0,1))
mms_samples2 = mms.fit_transform(raw_samples)
7. Шаблон предварительной обработки данных
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# Import the dataset
dataset = pd.read_csv('Data.csv')
X = dataset.iloc[:,:-1].values
y = dataset.iloc[:,3].values
# Taking care of missing data
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values="NaN",strategy="mean",axis=0)
imputer = Imputer()
test = imputer.fit(X[:,1:3])
X[:,1:3] = imputer.transform(X[:,1:3])
# Encoding categorical data
from sklearn.preprocessing import LabelEncoder,OneHotEncoder
labelencoder_X = LabelEncoder()
X[:, 0] = labelencoder_X.fit_transform(X[:,0])
onehotencoder = OneHotEncoder(categorical_features = [0])
X = onehotencoder.fit_transform(X).toarray()
labelencoder_y = LabelEncoder()
y = labelencoder_y.fit_transform(y)
# Splitting the dataset into the Training set and Test set
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2,random_state=0)
# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)
8. Вопросы
8.1 В чем разница между fit, fit_transform и transform?
- fit (): Проще говоря, это поиск среднего значения, дисперсии, максимального и минимального значений тренировочного набора, то есть атрибутов тренировочного набора X, что можно понимать как процесс обучения;
- Transform(): на основе подгонки выполняются стандартизация, уменьшение размерности, нормализация и другие операции;
- fit_transform(): представляет собой комбинацию подгонки и преобразования, включая обучение и преобразование.
Уведомление:
- Вы должны сначала использовать fit_transform(trainData), а затем использовать transform(testData);
- Если вы используете transform(testData) напрямую, будет сообщено об ошибке;
- Если после fit_transform(trainData) использовать fit_transform(testData) вместо transform(testData), хотя его можно нормализовать, два результата не соответствуют одному и тому же «стандарту» и имеют очевидные различия.