Эта история поможет вам быстро изучить основы того, как вы можете создавать функции из данных для вашего алгоритма машинного обучения.

  1. Кодирование номинальных переменных:

Это категориальные переменные без какого-либо порядка в наборе данных. Их можно преобразовать из категориальных в числовые функции с помощью одной библиотеки горячего кодировщика или метода get_dummies от pandas.

Например. Цвета как категория в наборе данных.

Они могут быть преобразованы с помощью одного метода горячего кодирования.

из sklearn.preprocessing import LabelEncoder, OneHotEncoder
import pandas as pd

df=pd.DataFrame({"кошка":['синий','оранжевый','зеленый']})

print('кодировка метки:')
lb=LabelEncoder()
print(lb.fit_transform(df['cat']))

print("*"*20)
print('горячее кодирование: ')
oe=OneHotEncoder()
print(oe.fit_transform(df[['cat']]) .toarray())

print("*"*20)
print('горячее кодирование с использованием пустышек:')
print(pd.get_dummies(df[['cat']]))

2. Обработка пропущенных значений:

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

Отбрасывание пропущенных значений может привести к потере информации или систематической ошибке в выборках. Прежде чем отбрасывать недостающие значения, тщательно проанализируйте последствия.

импортировать pandas как pd
df=pd.DataFrame({'Col1':['a','b','c','d'],'Col2':[1,None,2,None] })

печать (дф)

df=df.dropna(how='all')
df=df.dropna(thresh=4)
df=df.dropna(subset=['Col2'])

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

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

из sklearn.impute import SimpleImputer
import numpy as np
import pandas as pd

df=pd.DataFrame({'Col1':['a','b','c','d'],'Col2':[1,None,2,None]})

print(df)
print("После вменения: "+'*'*20)

imputer=SimpleImputer(missing_values=np.nan,strategy='mean')
df2=pd.DataFrame(imputer.fit_transform(df[['Col2']]))
df=pd.concat( [df,df2],axis=1)
print(df)

Существуют и другие библиотеки, такие как MICEImputer и fancyimpute.

3. Стратегии извлечения и уменьшения признаков:

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

Удалите функции, которые сильно коррелируют с другими функциями, и используйте только одну из них.

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

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

4. Масштабирование и нормализация:

Общие используемые методы

Стандартизация среднего/дисперсии

MinMax масштабирование

Масштабирование Maxabs

Надежное масштабирование

нормализатор

Масштабирование: выполняется для определенного или нескольких столбцов в наборе данных.

Нормализация: это делается для строки данных в наборе данных независимо.

Стандартизация среднего/дисперсии:

из sklearn.preprocessing import StandardScaler
import numpy as np
import pandas as pd

df=pd.DataFrame({'Col1':[3,4,9,1],'Col2':[1000,3000,2000,4000]})
print(df)

print('После масштабирования'+”*”*20)
scale=StandardScaler()
df2=pd.DataFrame(scale.fit_transform(df),columns=['Col1','Col2'] )
печать (df2)

Мин./макс. стандартизация:

из sklearn.preprocessing import MinMaxScaler
import numpy as np
import pandas as pd

df=pd.DataFrame({'Col1':[3,4,9,1],'Col2':[1000,3000,2000,4000]})
print(df)

print('После масштабирования'+”*”*20)
scale=MinMaxScaler()
df2=pd.DataFrame(scale.fit_transform(df),columns=['Col1','Col2'] )
печать (df2)

Стандартизация Maxabs:

из sklearn.preprocessing import MaxAbsScaler
import numpy as np
import pandas as pd

df=pd.DataFrame({'Col1':[3,4,9,1],'Col2':[1000,3000,2000,4000]})
print(df)

print('После масштабирования'+”*”*20)
scale=MaxAbsScaler()
df2=pd.DataFrame(scale.fit_transform(df),columns=['Col1','Col2'] )
печать (df2)

Надежная стандартизация:

из sklearn.preprocessing import RobustScaler
import numpy as np
import pandas as pd

df=pd.DataFrame({'Col1':[3,4,9,1],'Col2':[1000,3000,2000,4000]})
print(df)

print('После масштабирования'+”*”*20)
scale=RobustScaler()
df2=pd.DataFrame(scale.fit_transform(df),columns=['Col1','Col2'] )
печать (df2)

Нормализатор:

Для каждой строки масштабирование может быть выполнено на основе нормы L1, L2 и Max. Масштабированные значения масштабируются со стандартным отклонением =1. Он широко используется в текстовой аналитике.

from sklearn.preprocessing import Normalizer
import numpy as np
import pandas as pd

df=pd.DataFrame({'Col1':[3,4,9,1],'Col2':[1000,3000,2000,4000]})
print(df)

print('После масштабирования'+”*”*20)
scale=Normalizer()
df2=pd.DataFrame(scale.fit_transform(df),columns=['Col1','Col2'] )
печать (df2)

5. Преобразование функций:

Полиномиальные преобразования могут использоваться для преобразования признаков.

from sklearn.preprocessing import PolynomialFeatures
import numpy as np
import pandas as pd

df=pd.DataFrame({'a':np.random.rand(5),'b':np.random.rand(5)})
cube=PolynomialFeatures(степень=3)
cube_features=cube.fit_transform(df)
df_cube=pd.DataFrame(cube_features)
print(df_cube)

Чем больше степень полинома, тем больше вероятность переобучения.

6. Текстовые функции:

Текстовые функции создаются из документов с использованием простой модели набора слов, подсчитывающей частоту слов в каждом документе.

CountVectorizer:

Учитывает только важность или частоту слов в документе.

from sklearn.feature_extraction.text import CountVectorizer
# список текстовых документов рассматривать каждое предложение как документ
text = [«Это демонстрационное предложение.», «Здесь лето».]
# создаем преобразование
vec = CountVectorizer()
# размечаем и формируем словарь
vec.fit(text)
print(vec.vocabulary_)
# кодируем документ< br /> vec = vec.fit_transform(text)
# суммировать закодированный вектор
print(vec.shape)
print(vec.toarray())

TfidfVectorizer:

Этот метод присваивает взвешенные значения каждому функциональному слову на основе его частоты в документе (TF или частота термина), а также частоте использования функции в других документах (IDF или обратная частота документа).

Вес рассчитывается как произведение TF*IDF.

где IDF = log [ n / df (t) ] + 1 , n = количество документов, df (t) = количество документов, в которых появляется термин t.

from sklearn.feature_extraction.text import TfidfVectorizer
# список текстовых документов рассматривать каждое предложение как документ
text = [«Это демонстрационное предложение.», «Здесь лето».]
# создаем преобразование
vec = TfidfVectorizer()
# токенизируем и формируем словарь
vec.fit(text)
print(vec.vocabulary_)
# кодируем документ< br /> vec = vec.fit_transform(text)
# суммировать закодированный вектор
print(vec.shape)
print(vec.toarray())

Векторизатор хеширования:

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

from sklearn.feature_extraction.text import HashingVectorizer
# список текстовых документов рассматривать каждое предложение как документ
text = [«Это демонстрационное предложение.», «Здесь лето».]
# создаем преобразование
vec = HashingVectorizer()
# токенизируем и формируем словарь
vec.fit(text)
# кодируем документ
vec = vec.fit_transform(text )
# суммировать закодированный вектор
print(vec.shape)
print(vec.toarray())

Итак, это были некоторые из распространенных методов разработки функций. Надеюсь, вам понравился пост. Продолжайте учиться, увидимся в следующем посте.

Примечание от команды Plain English

А вы знали, что у нас четыре публикации и канал на YouTube? Вы можете найти все это на нашей домашней странице plainenglish.io — проявите свою любовь, подписавшись на наши публикации и подписавшись на наш канал YouTube!