一元线性回归的Python编程实现
这篇文章主要是为了实现周志华老师的机器学习书涉及的:单变量的线性回归,即一元线性回归的Python编程实现。
代码如下:
# -*- coding: cp936 -*- from numpy import * import pandas as pd from pandas import Series import matplotlib.pyplot as plt import tensorflow as ts df=pd.read_csv('30a.csv') print(df) print(type(df)) m,n=shape(df) print(m,n) #取出密度和含糖量这两栏,这两栏存储到X矩阵 X=array(df[['density']].values[:,:]) print(X) y=array(df[['label']].values[:,:]) print(y) print(type(y)) print(y.ndim) print(y.dtype) pos0=(where(y==0)) print(pos0) pos1=(where(y==1)) print(pos1) pos00=int32(pos0[:1]) x_pos0=X[pos00] y_pos0=y[pos00] x_pos00=x_pos0[0][:] y_pos00=y_pos0[0][:] pos11=int32(pos1[:1]) x_pos1=X[pos11] y_pos1=y[pos11] x_pos11=x_pos1[0][:] y_pos11=y_pos1[0][:] plt.scatter(x_pos00,y_pos00,s=5) plt.scatter(x_pos11,y_pos11,s=5)
#以第一维度(即行)相加
x_u=sum(X,0)/m
#注意,逐元素相乘用multiple,矩阵直接相乘用dot w=(sum(multiply(y,X-x_u),0))/(sum(multiply(X,X))-(1/m)*(sum(X,0)*sum(X,0))) print(w) b=(1/m)*sum(y-w*X) print(b) y_hat=w*X+b print(y_hat) plt.plot(X,y_hat,'r--') plt.show()
最终我们可以得到如下图所示的输出结果,一条线,使得所有样本到直线的距离和最短。
一元线性回归的测试数据(30.csv)如下链接:
https://download.****.net/download/qq_34911780/10321468