一元线性回归的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()

最终我们可以得到如下图所示的输出结果,一条线,使得所有样本到直线的距离和最短。

一元线性回归的Python编程实现

一元线性回归的测试数据(30.csv)如下链接:

https://download.****.net/download/qq_34911780/10321468