Python: Robust Regression Menggunakan RANSAC

Seperti pada catatan sebelumnya, linear regression sangat mudah terpengaruh oleh data outlier.

Untuk visual testing, ada applet yang cukup bagus untuk menunjukan begitu mudahnya linear regression terpengaruh oleh data outlier.

Pada gambar pertama, kita buat data points acak. Linear regression melakukan fitting dengan cukup baik. Pada gambar kedua, hanya 4 data point kita geser secara ekstrim, fitting langsung bergeser banyak, dan nilai coeficient colleration langsung bergeser ke 0.5....

Jika ingin mencoba silakan ke alamat web ini http://digitalfirst.bfwpub.com/stats_applet/stats_applet_5_correg.html





Disini kita akan bahas robust regression menggunakan algoritma RANdom SAmple Consensus (RANSAC) Algorithm.

Ide dari Algoritma RANSAC adalah membuat model yang tidak terpengaruh outlier dengan melakukan otomatis testing dengan subset dari data training yang diberikan.

Sama seperti pada catatan sebelumnya, data training atau X yang digunakan kolom RM dan label atau y adalah kolom MEDV.


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

from sklearn.linear_model import RANSACRegressor


df = pd.read_csv('housing.data', delim_whitespace=True, header=None)

df.columns = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']


X = df['RM'].values.reshape(-1,1)
y = df['MEDV'].values

ransac = RANSACRegressor()

ransac.fit(X, y)

inlier_mask = ransac.inlier_mask_
outlier_mask = np.logical_not(inlier_mask)

line_X = np.arange(3, 10, 1)
line_y_ransac = ransac.predict(line_X.reshape(-1, 1))

sns.set(style='darkgrid', context='notebook')
plt.figure(figsize=(12,10));
plt.scatter(X[inlier_mask], y[inlier_mask], 
            c='blue', marker='o', label='Inliers')
plt.scatter(X[outlier_mask], y[outlier_mask],
            c='brown', marker='s', label='Outliers')
plt.plot(line_X, line_y_ransac, color='red')
plt.xlabel('average number of rooms per dwelling')
plt.ylabel("Median value of owner-occupied homes in $1000's")
plt.legend(loc='upper left')
plt.show()



Python: Robust Regression Menggunakan RANSAC Python: Robust Regression Menggunakan RANSAC Reviewed by noname needed on May 24, 2018 Rating: 5

No comments:

Powered by Blogger.