python线性回归相关实现

import numpy as np
import matplotlib.pyplot as plt
x=np.array([1.,2.,3.,4.,5.])
y=np.array([1.,3.,2.,3.,5.])
plt.scatter(x,y)这里画出的是散点图
plt.axis([0,6,0,6])设置坐标的大概范围
plt.show()画出图像
x_mean=np.mean(x)用np包中的mean函数求取平均值
y_mean=np.mean(y)
num=0.0
d=0.0
for x_i,y_i in zip(x,y):将数据打包 zip返回的是元组
num+=(x_i-x_mean)(y_i-y_mean)
d+=(x_i-x_mean)**2
a=num/d
b=y_mean-x_mean
a
y_hat=ax+b
plt.scatter(x,y)
plt.plot(x,y_hat,color=‘r’)同时设置一个颜色
plt.show()
predict_x=6
predict_y=a
predict_x+b

import numpy as np
class linearRegression2:
def init(self):
self.a_=None
self.b_=None

def fit(self,x_train,y_train):
	assert x_train.ndim=1设置断言,这里和c++语法是差不多的
	assert len(x_train)==len(y_train)
	x_mean=np.mean(x_train)
	y_mean=np.mean(y_train)
	num=(x_train-x_mean).dot(y_train-y_mean)进行向量的点乘
	d=(x_train-x_mean)*(x_trian-x_mean)
	self.a_=num/d
	self.b_=y_mean-a*x_mean
	return self

def predict(self,x_predict):
	assert self.a_ is not None and self.b_ is not None 
	assert x_predict.ndim=1
	return np.array([_])将返回值给设置成nparray的形式

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets 自己带的数据集
boston =datasets.load_boston()
print(boston.DESCR)
print(boston.feature_names)
x=boston.data[:,5]
x.shape
y=boston.target
plt.scatter(x,y)
plt.show()
x=x[y<50.0]
y=y[y<50.0]
plt.scatter(x,y)
plt.show()

import numpy as np
class linearRegression:
def init(self):
self.coef_=None
self.interception=None
self._theta=None
def fit_normal(self,X_train,y_train):
assert X_train.shape[0]==y_train.shape[0]
X_b=np.hstack([np.ones((len(X_train),1)),X_train])

	hstack函数的功能是将一个向量拼接到另外的一个向量上去
	注意是先变列,然后再拼接
	np.ones((len(X_train,1)))是生成一个全1的向量,括号里面的是对应的坐标x,y


	self._theta=np.linalg.inv(X_b.dot(X_b)).dot(X_b.T).dot(y_train);
	inv函数是生成一个矩阵的逆矩阵,
	dot函数是进行点乘,
	X_b.T是用于求转置
	self.interception=self._theta[0]
	self.coef_=self._theta[1:]
	return self
def predict(self,X_predict):



def __repr__(self):
	return "linearRegression()"

###########
zip 函数的功能测试
x=[1,2,3] 这里的list必须是中间有逗号,不然会报错
y=[4,5,6]
z=[7,8,9]
for xyz in zip(x,y,z):
print(xyz) 这时候输出的是1 4 7
2 5 8
3 6 9
分别取出这三个list的元素,拼成一个元组,然后输出即可
如果想打印不换行的话,可以
print(xyz,end=" ")即可
x=[1 ,2 ,3 ,4]
y=[1 ,2,3]
for xy in zip(xy):
print(xy)
输出值是 1 1
2 2
3 3
这个时候就会省掉最后一位
x=[1,2,3]
x=zip(x)
print(x)
结果会是这样 (1,)
(2,)
(3,)
x=zip()
print (x)
这时输出的是[]
这里zip可以理解为压缩包的形式
而zip(*xyz)的形式就是将这个给解压缩,然后返回的将是一个二维矩阵
#########

猜你喜欢

转载自blog.csdn.net/weixin_39587440/article/details/83239445