ʻO ka manawa pinepine ka poʻe e komo ana i ke kahua o ka ʻEpekema ʻIkepili he mea liʻiliʻi ma mua o nā manaʻo maoli o ka mea e kali nei iā lākou. Manaʻo ka poʻe he nui i kēia manawa e kākau lākou i nā pūnaewele neural maikaʻi, hana i kahi mea kōkua leo mai Iron Man, a i ʻole e hahau i nā mea āpau ma nā mākeke kālā.
Akā, hana 'Ikepili Hoʻohana ʻia ka ʻepekema i ka ʻikepili, a ʻo kekahi o nā mea koʻikoʻi a hoʻopau manawa ke hoʻoponopono i ka ʻikepili ma mua o ka hānai ʻana iā ia i loko o kahi neural network a i ʻole ka nānā ʻana iā ia ma kekahi ala.
Ma kēia ʻatikala, e wehewehe kā mākou hui pehea e hiki ai iā ʻoe ke hana i ka ʻikepili me ka maʻalahi me nā ʻōlelo aʻoaʻo a me nā code. Ua hoʻāʻo mākou e hana maʻalahi i ke code a hiki ke hoʻohana ʻia no nā ʻikepili ʻokoʻa.
ʻAʻole hiki i nā poʻe loea ke ʻike i kekahi mea kupaianaha ma kēia ʻatikala, akā hiki i ka poʻe hoʻomaka ke aʻo i kahi mea hou, a ʻo kēlā me kēia mea i moeʻuhane lōʻihi e hana i kahi puke kaʻawale no ka hoʻoili ʻikepili wikiwiki a hoʻonohonoho ʻia hiki ke kope i ke code a hōʻano hou iā lākou iho, a i ʻole.
Ua loaʻa iā mākou ka ʻikepili. He aha ka hana aʻe?
No laila, ke kūlana: pono mākou e hoʻomaopopo i ka mea a mākou e hana nei, ke kiʻi holoʻokoʻa. No ka hana ʻana i kēia, hoʻohana mākou i nā pandas e wehewehe i nā ʻano ʻikepili like ʻole.
import pandas as pd #импортируем pandas
import numpy as np #импортируем numpy
df = pd.read_csv("AB_NYC_2019.csv") #читаем датасет и записываем в переменную df
df.head(3) #смотрим на первые 3 строчки, чтобы понять, как выглядят значения
df.info() #Демонстрируем информацию о колонках
E nānā kākou i nā waiwai kolamu:
- Ua like anei ka heluna o na laina o kela kolamu me ka huina o na laina?
- He aha ke ʻano o ka ʻikepili i kēlā me kēia kolamu?
- ʻO ke kolamu hea mākou e makemake ai e hoʻopaʻa i ka wānana no ia?
ʻO nā pane i kēia mau nīnau e ʻae iā ʻoe e nānā i ka ʻikepili a huki i kahi hoʻolālā no kāu mau hana e hiki mai ana.
Eia kekahi, no ka nānā hohonu ʻana i nā waiwai i kēlā me kēia kolamu, hiki iā mākou ke hoʻohana i ka hana pandas describe(). Eia naʻe, ʻo ka hemahema o kēia hana ʻaʻole ia e hāʻawi i ka ʻike e pili ana i nā kolamu me nā koina string. E hana mākou iā lākou ma hope.
df.describe()
Kiʻi kilokilo
E nānā kākou i kahi o kā mākou waiwai ʻole:
import seaborn as sns
sns.heatmap(df.isnull(),yticklabels=False,cbar=False,cmap='viridis')
He nānā pōkole kēia mai luna mai, i kēia manawa e neʻe mākou i nā mea hoihoi
E ho'āʻo kākou e ʻimi a, inā hiki, e wehe i nā kolamu hoʻokahi wale nō waiwai ma nā lālani a pau (ʻaʻole lākou e hoʻopilikia i ka hopena ma kekahi ʻano):
df = df[[c for c
in list(df)
if len(df[c].unique()) > 1]] #Перезаписываем датасет, оставляя только те колонки, в которых больше одного уникального значения
I kēia manawa, pale mākou iā mākou iho a me ka holomua o kā mākou papahana mai nā laina ʻelua (nā laina i loaʻa ka ʻike like ma ke ʻano like me kekahi o nā laina e kū nei):
df.drop_duplicates(inplace=True) #Делаем это, если считаем нужным.
#В некоторых проектах удалять такие данные с самого начала не стоит.
Māhele mākou i ka ʻikepili i ʻelua: hoʻokahi me nā waiwai qualitative, a ʻo kekahi me nā helu quantitative
Maanei, pono mākou e wehewehe iki: inā ʻaʻole pili pono nā laina me ka ʻikepili i nalowale i ka qualitative a me quantitative data, a laila pono mākou e hoʻoholo i ka mea a mākou e kaumaha ai - nā laina āpau me ka ʻikepili nalo, ʻo kahi hapa wale nō. a i ʻole kekahi mau kolamu. Inā pili nā laina, aia iā mākou nā kuleana āpau e puʻunaue i ka ʻikepili i ʻelua. A i ʻole, pono ʻoe e hana mua i nā laina i hoʻopili ʻole i ka ʻikepili i nalowale i ka qualitative a me quantitative, a laila e puʻunaue i ka dataset i ʻelua.
df_numerical = df.select_dtypes(include = [np.number])
df_categorical = df.select_dtypes(exclude = [np.number])
Hana mākou i kēia i mea e maʻalahi ai ka hoʻoponopono ʻana i kēia mau ʻano ʻikepili ʻelua - ma hope e hoʻomaopopo mākou i ka maʻalahi o kēia hana i ko mākou ola.
Hana mākou me ka ʻikepili quantitative
ʻO ka mea mua a mākou e hana ai, ʻo ia ka hoʻoholo inā he "koluma kiu" i ka ʻikepili helu. Kapa mākou i kēia mau kolamu no ka mea ke hōʻike nei lākou iā lākou iho he ʻikepili quantitative, akā hana ma ke ʻano he ʻikepili qualitative.
Pehea mākou e ʻike ai iā lākou? ʻOiaʻiʻo, pili ia i ke ʻano o ka ʻikepili āu e ʻimi nei, akā ma ka laulā he liʻiliʻi liʻiliʻi nā kolamu (ma kahi o 3-10 mau waiwai kūʻokoʻa).
print(df_numerical.nunique())
Ke ʻike mākou i nā kolamu kiu, e hoʻoneʻe mākou iā lākou mai ka ʻikepili quantitative i ka ʻikepili qualitative:
spy_columns = df_numerical[['колонка1', 'колока2', 'колонка3']]#выделяем колонки-шпионы и записываем в отдельную dataframe
df_numerical.drop(labels=['колонка1', 'колока2', 'колонка3'], axis=1, inplace = True)#вырезаем эти колонки из количественных данных
df_categorical.insert(1, 'колонка1', spy_columns['колонка1']) #добавляем первую колонку-шпион в качественные данные
df_categorical.insert(1, 'колонка2', spy_columns['колонка2']) #добавляем вторую колонку-шпион в качественные данные
df_categorical.insert(1, 'колонка3', spy_columns['колонка3']) #добавляем третью колонку-шпион в качественные данные
ʻO ka hope, ua hoʻokaʻawale loa mākou i ka ʻikepili quantitative mai ka ʻikepili qualitative a i kēia manawa hiki iā mākou ke hana pū me ia. ʻO ka mea mua, ʻo ia ka hoʻomaopopo ʻana i kahi i loaʻa iā mākou nā waiwai ʻole (NaN, a i kekahi mau hihia e ʻae ʻia ʻo 0 i nā waiwai ʻole).
for i in df_numerical.columns:
print(i, df[i][df[i]==0].count())
I kēia manawa, he mea nui e hoʻomaopopo i kahi e hōʻike ai nā kolamu zero i nā waiwai i nalowale: no ke ʻano o ka ʻohi ʻia ʻana o ka ʻikepili? A i ʻole pili paha i nā waiwai ʻikepili? Pono e pane ʻia kēia mau nīnau i kēlā me kēia hihia.
No laila, inā hoʻoholo mākou e nalowale ana ka ʻikepili i loaʻa nā zeros, pono mākou e hoʻololi i nā zeros me NaN i mea e maʻalahi ai ka hana me kēia ʻikepili nalowale ma hope.
df_numerical[["колонка 1", "колонка 2"]] = df_numerical[["колонка 1", "колонка 2"]].replace(0, nan)
I kēia manawa, e ʻike kākou i kahi e nele ai ka ʻikepili:
sns.heatmap(df_numerical.isnull(),yticklabels=False,cbar=False,cmap='viridis') # Можно также воспользоваться df_numerical.info()
Eia kēlā mau waiwai i loko o nā kolamu e nalowale ana e kaha ʻia i ka melemele. A i kēia manawa hoʻomaka ka leʻaleʻa - pehea e hana ai i kēia mau waiwai? Pono wau e holoi i nā lālani me kēia mau waiwai a i ʻole kolamu? A i ʻole e hoʻopiha i kēia mau waiwai ʻole me nā mea ʻē aʻe?
Eia ke kiʻikuhi pili e hiki ke kōkua iā ʻoe e hoʻoholo i ka mea hiki ke hana ʻia me nā waiwai ʻole:
0. Wehe i nā kolamu pono ʻole
df_numerical.drop(labels=["колонка1","колонка2"], axis=1, inplace=True)
1. Ua ʻoi aku ka nui o nā waiwai hakahaka ma kēia kolamu ma mua o 50%?
print(df_numerical.isnull().sum() / df_numerical.shape[0] * 100)
df_numerical.drop(labels=["колонка1","колонка2"], axis=1, inplace=True)#Удаляем, если какая-то колонка имеет больше 50 пустых значений
2. Holoi i nā laina me nā waiwai ʻole
df_numerical.dropna(inplace=True)#Удаляем строчки с пустыми значениями, если потом останется достаточно данных для обучения
3.1. Ke hoʻokomo ʻana i kahi waiwai maʻamau
import random #импортируем random
df_numerical["колонка"].fillna(lambda x: random.choice(df[df[column] != np.nan]["колонка"]), inplace=True) #вставляем рандомные значения в пустые клетки таблицы
3.2. Ke hoʻokomo nei i kahi waiwai mau
from sklearn.impute import SimpleImputer #импортируем SimpleImputer, который поможет вставить значения
imputer = SimpleImputer(strategy='constant', fill_value="<Ваше значение здесь>") #вставляем определенное значение с помощью SimpleImputer
df_numerical[["новая_колонка1",'новая_колонка2','новая_колонка3']] = imputer.fit_transform(df_numerical[['колонка1', 'колонка2', 'колонка3']]) #Применяем это для нашей таблицы
df_numerical.drop(labels = ["колонка1","колонка2","колонка3"], axis = 1, inplace = True) #Убираем колонки со старыми значениями
3.3. E hoʻokomo i ka waiwai awelika a i ʻole ka nui pinepine
from sklearn.impute import SimpleImputer #импортируем SimpleImputer, который поможет вставить значения
imputer = SimpleImputer(strategy='mean', missing_values = np.nan) #вместо mean можно также использовать most_frequent
df_numerical[["новая_колонка1",'новая_колонка2','новая_колонка3']] = imputer.fit_transform(df_numerical[['колонка1', 'колонка2', 'колонка3']]) #Применяем это для нашей таблицы
df_numerical.drop(labels = ["колонка1","колонка2","колонка3"], axis = 1, inplace = True) #Убираем колонки со старыми значениями
3.4. E hoʻokomo i ka waiwai i helu ʻia e kekahi kumu hoʻohālike
I kekahi manawa hiki ke helu ʻia nā waiwai me ka hoʻohana ʻana i nā hiʻohiʻona regression me ka hoʻohana ʻana i nā hiʻohiʻona mai ka hale waihona puke sklearn a i ʻole nā hale waihona puke like ʻole. E hāʻawi kā mākou hui i kahi ʻatikala ʻokoʻa e pili ana i ka hana ʻana i kēia wā e hiki mai ana.
No laila, i kēia manawa, e hoʻopau ʻia ka moʻolelo e pili ana i ka ʻikepili quantitative, no ka mea he nui nā nuances e pili ana i ka hana maikaʻi ʻana i ka hoʻomākaukau ʻana i ka ʻikepili a me ka preprocessing no nā hana like ʻole, a ua lawe ʻia nā mea kumu no ka ʻikepili quantitative i loko o kēia ʻatikala. ʻo ka manawa kēia e hoʻi ai i ka ʻikepili qualitative. Hiki iā ʻoe ke hoʻololi i kēia puke e like me kou makemake, me ka hoʻololi ʻana iā ia i nā hana like ʻole, no laila e holo wikiwiki ka preprocessing data!
ʻIkepili kūpono
ʻO ke kumu, no ka ʻikepili qualitative, hoʻohana ʻia ke ʻano Hoʻokahi-hot-encoding i mea e hoʻohālikelike ai mai kahi kaula (a i ʻole mea) i kahi helu. Ma mua o ka neʻe ʻana i kēia wahi, e hoʻohana kākou i ke kiʻikuhi a me ke code ma luna nei e hoʻoponopono i nā waiwai ʻole.
df_categorical.nunique()
sns.heatmap(df_categorical.isnull(),yticklabels=False,cbar=False,cmap='viridis')
0. Wehe i nā kolamu pono ʻole
df_categorical.drop(labels=["колонка1","колонка2"], axis=1, inplace=True)
1. Ua ʻoi aku ka nui o nā waiwai hakahaka ma kēia kolamu ma mua o 50%?
print(df_categorical.isnull().sum() / df_numerical.shape[0] * 100)
df_categorical.drop(labels=["колонка1","колонка2"], axis=1, inplace=True) #Удаляем, если какая-то колонка
#имеет больше 50% пустых значений
2. Holoi i nā laina me nā waiwai ʻole
df_categorical.dropna(inplace=True)#Удаляем строчки с пустыми значениями,
#если потом останется достаточно данных для обучения
3.1. Ke hoʻokomo ʻana i kahi waiwai maʻamau
import random
df_categorical["колонка"].fillna(lambda x: random.choice(df[df[column] != np.nan]["колонка"]), inplace=True)
3.2. Ke hoʻokomo nei i kahi waiwai mau
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy='constant', fill_value="<Ваше значение здесь>")
df_categorical[["новая_колонка1",'новая_колонка2','новая_колонка3']] = imputer.fit_transform(df_categorical[['колонка1', 'колонка2', 'колонка3']])
df_categorical.drop(labels = ["колонка1","колонка2","колонка3"], axis = 1, inplace = True)
No laila, ua loaʻa iā mākou kahi paʻa i nā nulls i ka ʻikepili qualitative. ʻO ka manawa kēia e hana i ka hoʻopāpā wela hoʻokahi i nā waiwai i loko o kāu waihona. Hoʻohana pinepine ʻia kēia ʻano hana e hōʻoia e hiki i kāu algorithm ke aʻo mai ka ʻikepili kiʻekiʻe.
def encode_and_bind(original_dataframe, feature_to_encode):
dummies = pd.get_dummies(original_dataframe[[feature_to_encode]])
res = pd.concat([original_dataframe, dummies], axis=1)
res = res.drop([feature_to_encode], axis=1)
return(res)
features_to_encode = ["колонка1","колонка2","колонка3"]
for feature in features_to_encode:
df_categorical = encode_and_bind(df_categorical, feature))
No laila, ua hoʻopau mākou i ka hana ʻana i ka ʻikepili qualitative a me quantitative kaʻawale - ka manawa e hoʻohui ai iā lākou
new_df = pd.concat([df_numerical,df_categorical], axis=1)
Ma hope o ka hoʻohui ʻana i nā ʻikepili i hoʻokahi, hiki iā mākou ke hoʻohana i ka hoʻololi ʻikepili me ka hoʻohana ʻana iā MinMaxScaler mai ka waihona sklearn. E hana kēia i kā mākou waiwai ma waena o 0 a me 1, e kōkua i ka wā e aʻo ai i ke kumu hoʻohālike i ka wā e hiki mai ana.
from sklearn.preprocessing import MinMaxScaler
min_max_scaler = MinMaxScaler()
new_df = min_max_scaler.fit_transform(new_df)
Ua mākaukau kēia ʻikepili no nā mea āpau - neural networks, standard ML algorithms, etc.!
Ma kēia ʻatikala, ʻaʻole mākou i noʻonoʻo i ka hana ʻana me ka ʻikepili manawa, no ka mea, no ia ʻikepili pono ʻoe e hoʻohana i nā ʻenehana hana ʻokoʻa, e pili ana i kāu hana. I ka wā e hiki mai ana, e hāʻawi kā mākou hui i kahi ʻatikala ʻokoʻa i kēia kumuhana, a ke manaʻo nei mākou e hiki ke lawe mai i kahi mea hoihoi, hou a pono i kou ola, e like me kēia.
Source: www.habr.com