深度学习之 LinearRegression(多元线性回归)
1、多线线性回归的实现
跟简单线性回归一样都是y-x的映射关系,多元线性回归只是x是多个样本,简单线性回归就是y(预测) = ax(i) +b,而多元线性回归则是如下图。
1.1、列出损失函数
1.2、生成x_b
新增了一列全为一的列。
1.3、求出θ
1.4、根据算出来的θ,求出预测的y⑧
1.5、求R_Square
2、代码实现
2.1、初始化未知量
def __init__(self
):
self
.coef_
= None
self
.interception
= None
self
._theta
= None
2.2、写出训练方法
def fit_normal(self
, X_strain
, y_strain
):
X_b
= np
.hstack
([np
.ones
((len(X_strain
),1)),X_strain
])
self
._theta
= np
.linalg
.inv
((X_b
.T
.dot
(X_b
))).dot
(X_b
.T
).dot
(y_strain
)
self
.coef_
= self
._theta
[1:]
self
.interception
= self
._theta
[0]
return self
2.3、写出预测方法
def predict(self
,X_predict
):
X_b
= np
.hstack
([np
.ones
(len(X_predict
), 1), X_predict
])
return X_b
.dot
(self
._theta
)
3.4、求R_Square
def R_Square(self
, x_train
, y_trian
):
return 1 - ((self
.predict
(x_train
) - y_trian
).dot
(self
.predict
(x_train
) - y_trian
) / (np
.mean
(y_trian
) - y_train
).dot
(np
.mean
(y_trian
) - y_train
))
3、实例代码
from matplotlib
import pyplot
as plt
import pandas
as pd
import numpy
as np
from Regression
import SimpleRegression
from sklearn
import datasets
from sklearn
.model_selection
import train_test_split
class LinearRegression():
def __init__(self
):
self
.coef_
= None
self
.interception
= None
self
._theta
= None
def fit_normal(self
, X_strain
, y_strain
):
X_b
= np
.hstack
([np
.ones
((len(X_strain
),1)),X_strain
])
self
._theta
= np
.linalg
.inv
((X_b
.T
.dot
(X_b
))).dot
(X_b
.T
).dot
(y_strain
)
self
.coef_
= self
._theta
[1:]
self
.interception
= self
._theta
[0]
return self
def predict(self
, _predict
):
X_b
= np
.hstack
([np
.ones
((len(_predict
),1)),_predict
])
return X_b
.dot
(self
._theta
)
def R_Square(self
, x_train
, y_trian
):
return 1 - ((self
.predict
(x_train
) - y_trian
).dot
(self
.predict
(x_train
) - y_trian
) /
(np
.mean
(y_trian
) - y_train
).dot
(np
.mean
(y_trian
) - y_train
))
if __name__
== '__main__':
boston
= datasets
.load_boston
()
x
= boston
.data
y
= boston
.target
X_train
,X_text
,y_train
,y_text
= train_test_split
(x
,y
,train_size
=0.8)
my_reg
= LinearRegression
()
my_reg
.fit_normal
(X_train
,y_train
)
print(my_reg
.interception
)
print(my_reg
.predict
(X_text
))
print(my_reg
.R_Square
(X_text
,y_text
))
4、直接调用sklearn中的函数
4.1、直接调用写好的封装好的函数 LinearRegression类
from sklearn
.linear_model
import LinearRegression
from sklearn
import datasets
from sklearn
.model_selection
import train_test_split
boston
= datasets
.load_boston
()
x
= boston
.data
y
= boston
.target
X_train
,X_text
,y_train
,y_text
= train_test_split
(x
,y
,train_size
=0.8)
my_reg
= LinearRegression
()
my_reg
.fit
(X_train
,y_train
)
print(my_reg
.intercept_
)
print(my_reg
.coef_
)
print(my_reg
.predict
(X_text
))
print(my_reg
.score
(X_text
,y_text
))
4.2、sklearn拥有的参数有,直接使用即可
4.3、理解其中参数的含义
my_reg
.coef_
[-1.27534647e-01 4.68077544e-02 1.41567062e-02 1.61650955e+00
-1.75715965e+01 4.50077752e+00 -9.50204473e-03 -1.58102201e+00
2.63574512e-01 -1.18220060e-02 -9.36185192e-01 9.57378376e-03
-4.17866505e-01]
print(np
.argsort
(my_reg
.coef_
))
[ 4 7 10 12 0 9 6 11 1 2 8 3 5]
print(boston
.feature_names
[np
.argsort
(my_reg
.coef_
)] )
['NOX' 'DIS' 'PTRATIO' 'LSTAT' 'CRIM' 'TAX' 'AGE' 'B' 'ZN' 'INDUS' 'RAD'
'CHAS' 'RM']
转载请注明原文地址:https://blackberry.8miu.com/read-18092.html