Table of Contents
Veri dönüşümü, verilerin orijinal formatından farklı bir formata dönüştürülmesi veya değiştirilmesi anlamına gelir. Dönüşüm, veri setlerini daha anlaşılır hale getirebilir. Özelliklerin dönüştürülmesi, verilerin daha net bir şekilde yorumlanmasına yardımcı olur.
Logaritmic Transformation
Bir değişkenin değerlerini logaritmik bir ölçekte ifade etmeyi ifade eder. Veri dağılımını düzeltmek, değişkenin dağılımını normalleştirmek veya bir değişkenin etkisini dengelemek için kullanılır. Logaritmik dönüşümün kullanılması, özellikle bir değişkenin dağılımı çarpık veya normal dağılıma yakın değilse, normal dağılıma daha yakın bir dağılım elde etmek için tercih edilir. Verilerin ölçeğini küçültür ve daha yönetilebilir hale getirir. Dağılımı normalleştirir ve asimetriyi (çarpıklığı) azaltır. Sıfır değerlerini işleyemez. Verilerin orijinal dağılımı değiştirir. Pozitif değerli verilerin analizini kolaylaştırır.
# numpy
data[['column_name']] = np.log(data[['column_name']])
# scikit-learn
transformer = FunctionTransformer(np.log, validate=True)
# feature_engine
lt = LogTransformer(variables=['column_name'])
lt.fit(df)
Reciprocal Transformation
Bir değişkenin tersini alarak yeni bir değişken oluşturma işlemidir. Veri setindeki çarpık dağılımları düzeltebilmek veya değişkenler arasındaki ilişkileri değiştirebilmek amacıyla kullanılır. Verilerin ölçeğini küçülterek daha yönetilebilir hale getirir. Dağılımı düzleştirerek asimetriyi azaltır. Sıfır değerlerini işleyemez.
# numpy
df[['column_name']] = np.reciprocal(df[['column_name']])
# scikit-learn
transformer = FunctionTransformer(np.reciprocal, validate=True)
# feature_engine
rt = ReciprocalTransformer(variables = ['column_name'])
rt.fit(df)
Power Transformation
# numpy
df[['column_name']] = np.power(df[['column_name']], 0.3)
# scikit-learn
transformer = FunctionTransformer(lambda x: np.power(x, 0.3), validate=True)
# feature_engine
pt = PowerTransformer(variables = ['column_name'], exp=0.3)
pt.fit(df)
Square/Cube Root Transformation
# numpy
df[['column_name']] = np.sqrt(df[['column_name']])
df[['column_name']] = np.cbrt(df[['column_name']])
# scikit-learn
transformer = FunctionTransformer(np.sqrt, validate=True)
transformer = FunctionTransformer(np.cbrt, validate=True)
# feature_engine
pt = PowerTransformer(variables = ['column_name'], exp=1/2)
pt.fit(df)
pt = PowerTransformer(variables = ['column_name'], exp=1/3)
pt.fit(df)
Box-Cox Transformation
Değişkenlerin dönüşümünde kullanılan parametrik bir yöntemdir. Verinin normal dağılıma daha yakın hale getirilmesini amaçlar. Lambda parametresinin optimal değeri, maksimum olabilirlik tahmini veya aykırı bilgi ölçütlerine göre belirlenir. Dağılımın normalleştirerek asimetriyi azaltır.
# scikit-learn
transformer = PowerTransformer(method='box-cox', standardize=False)
# scipy
df['column_name'], lambda_ = stats.boxcox(df['column_name'])
# feature_engine
bct = BoxCoxTransformer(variables = ['column_name'])
bct.fit(data)
Yeo-Johnson Transformation
Pozitif veya negatif değerler içeren verilerin ölçeğini küçültmek ve dağılımını normalleştirmek için kullanılan bir matematiksel işlemdir. Bu dönüşüm, Box-Cox dönüşümüne benzerdir, ancak negatif değerleri de işlemek için modifiye edilmiştir.
# scikit-learn
transformer = PowerTransformer(method='yeo-johnson', standardize=False)
# scipy
df['column_name'], lambda_ = stats.yeojohnson(df['column_name'])
# feature_engine
yjt = YeoJohnsonTransformer(variables = ['column_name'])
Quantile Transformation
Verinin dağılımını dönüştürerek normal dağılıma yakın bir dağılım elde etmeyi veya belirli bir olasılık dağılımına uygun hale getirmeyi hedefler. Verilerin dağılımını istenen bir dağılıma dönüştürerek analiz ve modellemeyi kolaylaştırır. Asimetri ve uzun kuyruk gibi sorunları gidererek outlier’ların etkisini azaltır.
# scikit-learn
quantile_transformer = preprocessing.QuantileTransformer(output_distribution='normal', random_state=0)
X_trans = quantile_transformer.fit_transform(X)
quantile_transformer.quantiles_
Binarize
Bir veri setindeki sayısal değerleri belirli bir eşik değeriyle karşılaştırarak iki farklı kategoriye ayırmak veya dönüştürmek anlamına gelir. Bu işlem, sayısal verileri iki kategoriye bölmek için kullanılır: belirlenen eşik değerinin altında olan değerler bir kategoriye, eşik değerinin üstünde olan değerler ise diğer kategoriye atanır.
from sklearn.preprocessing import Binarizer
trf = ColumnTransformer([
('bin',Binarizer(copy=False),['family'])
],remainder='passthrough')
Spline Transformation
Verileri, her biri farklı bir eğri ile temsil edilen bir dizi parçaya böler. Veriler, spline’ların uç noktalarını belirlemek için kullanılır. Bu, veri setinin minimum ve maksimum değerlerini bulmak veya eşit aralıklarla bölünmesini sağlayarak yapılabilir. Spline’lar, uç noktalara ve diğer kısıtlamalara göre oluşturulur. Bu, lineer, polinom veya diğer eğriler olabilir. Her veri noktası, en yakın spline’a atanır. Dönüştürülmüş veri seti, her veri noktasının atanmış spline’ın değeridir.
X = np.arange(10).reshape(10, 1)
spline = preprocessing.SplineTransformer(degree=2, n_knots=5)
spline.fit_transform(X)