概述
无论是怎样的数据集与学习,分类与回归都是必须要掌握的基础中的基础。
对于单元线性回归而言,其斜率k和截距b的计算方法大家都较为清楚,简单而言就是用求偏导置零的方法得到公式。
多元线性回归的推导大抵用线性空间的垂直距离来完成,最终结论为theta=inv(XT·X)XT·y
上代码
from sklearn import linear_model
import numpy as np
from numpy import linalg
#单元线性回归
class SimpleLinearRegression:
def __init__(self):
self.a=None
self.b=None
def fit(self,x_train,y_train):
assert x_train.ndim==1
xmean=np.mean(x_train)
ymean=np.mean(y_train)
up=0.0
down=0.0
for i in range(len(x_train)):
up+=(x_train[i]-xmean)*(y_train[i]-ymean)
down+=(x_train[i]-xmean)**2
self.a=up/down
self.b=ymean-self.a*xmean
return self
def predict(self,x_test_group):
return np.array([self.__predict(x_test) for x_test in x_test_group])
def __predict(self,x_test):
return self.a*x_test+self.b
#均方根
def mean_squared_error(self,y_true,y_predict):
return np.sum((y_true-y_predict)**2)/len(y_true)
#R方
def rr(self,y_true,y_predict):
return 1-(self.mean_squared_error(y_true,y_predict)/np.var(y_true))
#多元线性回归
class MultiLinearRegression:
def __init__(self):
self.coef_=None
#斜率,个数与X向量维度一致,theta1-n
self.intercept_=None #截距,共一个,也是theta0
self._theta=None
#权重,即所有参数,包括截距与斜率
def fit(self,X_train,y_train):
assert X_train.shape[0]==y_train.shape[0]
ones=np.ones((X_train.shape[0],1))
X_b=np.hstack((ones,X_train))
#参数矩阵求解结果theta=inv(X.T*X)*X.T*Y
self._theta=linalg.inv(np.dot(X_b.T,X_b)).dot(X_b.T).dot(y_train)
self.intercept_=self._theta[0]
self.coef_=self._theta[1:]
return self
def predict(self,X_predict):
ones=np.ones((X_predict.shape[0],1))
X_b=np.hstack((ones,X_predict))
return X_b.dot(self._theta)
# 均方根
def mean_squared_error(self, y_true, y_predict):
return np.sum((y_true - y_predict) ** 2) / len(y_true)
# R方
def rr(self, y_true, y_predict):
return 1 - (self.mean_squared_error(y_true, y_predict) / np.var(y_true))
#随便创建的数据
single_x=np.array([1,2,4,6,8])
multi_x=np.array([[1,2],[2,3],[4,5],[6,7],[8,9]])
y=np.array([2,5,7,8,9])
#单元回归
singlelinear=SimpleLinearRegression()
singlelinear.fit(single_x,y)
single_ypredict=singlelinear.predict([7,8]) #预测
single_R=singlelinear.rr([8,9],singlelinear.predict([6,8]))
print(single_ypredict,single_R)
#多元回归
multilinear=MultiLinearRegression()
multilinear.fit(multi_x,y)
multi_ypredict=multilinear.predict(np.array([[4,4]]))
multi_R=multilinear.rr([8,9],multilinear.predict(np.array([[6,7],[8,9]])))
print(multi_ypredict,multi_R)
sklearn调用(数据与上一致)
#sklearn调用
lr=linear_model.LinearRegression(fit_intercept=True,normalize=False,copy_X=True)
#单元回归
lr.fit(single_x.reshape(-1,1),y)
lr.predict(np.array([7,8]).reshape(-1,1))
#多元回归
lr.fit(multi_x,y)
lr.predict(np.array([[4,4]]))
最后
以上就是调皮树叶为你收集整理的2机器学习&图像分类之线性回归与sklearn调用的全部内容,希望文章能够帮你解决2机器学习&图像分类之线性回归与sklearn调用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复