线性回归(又名普通最小二乘法)
线性回归,或者普通最小二乘法,是回归问题最简单也是最经典的线性方法。线性回归寻找参数w和b,使得对训练集的预测值与真实的回归目标值y之间的均方误差最小。均方误差是预测值与真实值之差的平方和除以样本数。线性回归没有参数,这是一个优点。
import matplotlib.pyplot as plt #导入matplotlib库
import numpy as np #导入numpy库
import pandas as pd #导入pandas库
from sklearn.datasets import load_boston #从sklearn数据集库导入boston数据
boston =load_boston() #从读取的房价数据存储在boston变量中
boston.keys() #打印boston包含内容
boston.feature_names #打印data的变量名
bos=pd.DataFrame(boston.data) #将data转换为DataFrame格式以方便展示
bos[5].head() #data的第6列数据为RM#将taget打印出来
bos_taget=pd.DataFrame(boston.target) #将target转换为DataFrame格式以方便展示
print(bos_taget)#将target打印出来
bos_target=pd.DataFrame(boston.target) #将target转换为DataFrame格式以方便展示
bos_target.head()#绘制房屋价格,每个房屋的房间数量的散点图
%matplotlib inline
import matplotlib.font_manager as fm
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] #设置简黑字体
mpl.rcParams['axes.unicode_minus'] = False # 解决‘-’bugX=bos.iloc[:,5:6]
y=bos_targetplt.scatter(X,y)
plt.xlabel(u"住宅平均房间数")
plt.ylabel(u"房屋价格")from sklearn.linear_model import LinearRegression
lr=LinearRegression() #设定回归算法
lr.fit(X_train,y_train) #使用训练数据进行参数求解lr.intercept_#求解截距项
lr.coef_ #求解系数为#基于求解参数,对测试集进行预测
y_hat=lr.predict(X_test)
y_hat[:9]#基于求解参数,对测试集进行预测
y_hat=lr.predict(X_test)
y_hat[:9]
多变量线性回归实现:观影人数的拟合
%matplotlib inline
import matplotlib.pyplot as plt #导入matplotlib库
import numpy as np #导入numpy库
import pandas as pd #导入pandas库df=pd.read_csv(r"Data/3_film.csv")
df.head()#输出各变量的直方图
df.hist(xlabelsize=12,ylabelsize=12,figsize=(12,7)) #调整直方图尺寸#多变量的数据可视化密度图
df.plot(kind='density',subplots=True,layout=(2,2),sharex=False,fontsize=8,figsize=(12,7))#多变量的数据可视化之箱线图
df.plot(kind='box',subplots=True,layout=(2,2),sharex=False,sharey=False,fontsize=8,figsize=(12,7))#多变量的数据可视化之相关系数热力图
names = ['filmnum','filmsize','ratio','quality'] #设置变量名
correlations = df.corr() #计算变量之间的相关系数矩阵
# 绘制相关系数热力图
fig = plt.figure() #调用figure创建一个绘图对象
ax = fig.add_subplot(111) # 调用画板绘制第一个子图
cax = ax.matshow(correlations, vmin=0.3, vmax=1) #绘制热力图,从0.3到1
fig.colorbar(cax) #将matshow生成热力图设置为颜色渐变条
ticks = np.arange(0,4,1) #生成0-4,步长为1
ax.set_xticks(ticks) #生成刻度
ax.set_yticks(ticks)
ax.set_xticklabels(names) #生成x轴标签
ax.set_yticklabels(names)from pandas.plotting import scatter_matrix #导入散点图矩阵
scatter_matrix(df,figsize=(8,8), c='b') #绘制散点图from sklearn.model_selection import train_test_split
X = df.iloc[:,1:4] #选取data中的X变量
y =df.filmnum #设定target为y
#25%的数据构建测试样本,剩余作为训练样本
# 把X、y转化为数组形式,以便于计算
X = np.array(X.values)
y = np.array(y.values)
#以25%的数据构建测试样本,剩余作为训练样本
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state =1)from sklearn.linear_model import LinearRegression #使用LinearRegression库
lr=LinearRegression() #设定回归算法
lr.fit(X_train,y_train) #使用训练数据进行参数求解lr.intercept_#求解截距项
lr.coef_ #求解系数为#基于求解参数,对测试集进行预测
y_hat=lr.predict(X_test)
y_hat[:9]plt.figure(figsize=(10,6)) #设置图片尺寸
t = np.arange(len(X_test)) #创建t变量
#绘制y_test曲线
plt.plot(t, y_test, 'r', linewidth=2, label='y_test')
#绘制y_test曲线
plt.plot(t, y_hat, 'g', linewidth=2, label='y_hat')
plt.legend() #设置图例