回归:统计学分析数据的方法,目的在于了解两个或多个变数间是否相关、研究其相关方向与强度,并建立数学模型以便观察特定变数来预测研究者感兴趣的变数。回归分析可以帮助人们了解在自变量变化时因变量的变化量。一般来说,通过回归分析我们可以由给出的自变量估计因变量的条件期望。
目标:对房屋成交信息建立回归方程,并依据回归方程对房屋价格进行预测
背景:与房价密切相关的除了单位的房价,还有房屋的尺寸。我们可以根据已知的房屋成交价和房屋的尺寸进行线性回归,继而可以对已知房屋尺寸,而未知房屋成交价格的实例进行成交价格的预测。
import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model
# 读取数据集
datasets_X = []
datasets_Y = []
fr = open('prices.txt','r')
lines = fr.readlines()
for line in lines:
items = line.strip().split(',')
datasets_X.append(int(items[0]))
datasets_Y.append(int(items[1]))
length = len(datasets_X)
datasets_X = np.array(datasets_X).reshape([length,1])
datasets_Y = np.array(datasets_Y)
minX = min(datasets_X)
maxX = max(datasets_X)
X = np.arange(minX,maxX).reshape([-1,1])
linear = linear_model.LinearRegression()
linear.fit(datasets_X, datasets_Y)
# 图像中显示
plt.scatter(datasets_X, datasets_Y, color = 'red')
plt.plot(X, linear.predict(X), color = 'blue')
plt.xlabel('Area')
plt.ylabel('Price')
plt.show()
import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model
from sklearn.preprocessing import PolynomialFeatures
# 读取数据集
datasets_X = []
datasets_Y = []
fr = open('prices.txt','r')
lines = fr.readlines()
for line in lines:
items = line.strip().split(',')
datasets_X.append(int(items[0]))
datasets_Y.append(int(items[1]))
length = len(datasets_X)
datasets_X = np.array(datasets_X).reshape([length,1])
datasets_Y = np.array(datasets_Y)
minX = min(datasets_X)
maxX = max(datasets_X)
X = np.arange(minX,maxX).reshape([-1,1])
poly_reg = PolynomialFeatures(degree = 2)
X_poly = poly_reg.fit_transform(datasets_X)
lin_reg_2 = linear_model.LinearRegression()
lin_reg_2.fit(X_poly, datasets_Y)
# 图像中显示
plt.scatter(datasets_X, datasets_Y, color = 'red')
plt.plot(X, lin_reg_2.predict(poly_reg.fit_transform(X)), color = 'blue')
plt.xlabel('Area')
plt.ylabel('Price')
plt.show()
岭回归是一种专门用于共线性数据分析的有偏估计回归方法,是一种改良的最小二乘法,对某些数据的拟合强于最小二乘法
import numpy as np
from sklearn.linear_model import Ridge#调用岭回归算法
from sklearn import model_selection#加载交叉验证模块
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures#通过PolynomialFeatures创建多项式特征
data_path = ("ridge regression.csv")
data = np.genfromtxt(data_path,delimiter=',',skip_header=1,usecols=(1,2,3,4,5))#使用numpy方法读取数据,skip_header:跳过前n行
plt.subplot(211)
plt.plot(data[:,4])
X = data[:,:4]
Y = data[:,4]
poly = PolynomialFeatures(6)#创建最高次数为6次方的多项式
X = poly.fit_transform(X)
train_x,test_x,train_y,test_y = model_selection.train_test_split(X,Y,test_size = 0.3,
random_state = 0)
#将数据分为训练集和测试集,test_size表示测试集的比例,random_state表示随机数种子
#创建回归器,并进行训练
clf = Ridge(alpha=1.0,fit_intercept=True)#创建岭回归
clf.fit(train_x,train_y)#对回归器进行训练
clf.score(test_x,test_y)#利用测试集计算回归曲线的拟合优度
#拟合优度:评价拟合的好坏,最大为1,无最小值。
#绘制拟合曲线
start = 200
end = 300
y_pre = clf.predict(X)
time = np.arange(start,end)
plt.subplot(212)
plt.plot(time,Y[start:end],'b',label='real')
plt.plot(time,y_pre[start:end],'r',label='predict')
plt.legend(loc="upper left")
plt.show()
本文所用数据文件
下载链接:https://pan.baidu.com/s/1IV9oipnK_kn5AKTQjVAhoA
提取码:6hds