-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAutomated_Backward_Elimination.py
More file actions
38 lines (35 loc) · 1.48 KB
/
Automated_Backward_Elimination.py
File metadata and controls
38 lines (35 loc) · 1.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
X['dummy'] = 1
X = X.reindex(columns=['dummy'] + X.columns[:-1].tolist())
X = pd.get_dummies(X, drop_first = True)
yd = df.iloc[:, df.shape[1]-1].copy()
import statsmodels.formula.api as sm
def backwardElimination(x, SL, cols):
numVars = len(x[0])
temp = np.zeros((x.shape[0],numVars)).astype(int)
for i in range(0, numVars):
regressor_OLS = sm.OLS(y, x).fit()
maxVar = max(regressor_OLS.pvalues).astype(float)
adjR_before = regressor_OLS.rsquared_adj.astype(float)
if maxVar > SL:
for j in range(0, numVars - i):
if (regressor_OLS.pvalues[j].astype(float) == maxVar):
temp[:,j] = x[:, j]
x = np.delete(x, j, 1)
v = cols.pop(j)
tmp_regressor = sm.OLS(y, x).fit()
adjR_after = tmp_regressor.rsquared_adj.astype(float)
if (adjR_before >= adjR_after):
x_rollback = np.hstack((x, temp[:,[0,j]]))
x_rollback = np.delete(x_rollback, j, 1)
print (regressor_OLS.summary())
cols = cols.insert(j, v)
return x_rollback
else:
continue
regressor_OLS.summary()
return x
cols = list(range(0, len(X.columns)))
SL = 0.05
y = yd.iloc[:].values
X_opt = X.iloc[:, cols].values
X_Modeled = backwardElimination(X_opt, SL, cols)