库函数介绍
我们在实现对波士顿房价预测过程中调用了以下的python库函数:
- Seaborn ,是基于matplotlib的图形可视化python包。它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表。
- Matplotlib ,是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。
- Matplotlib, 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。
- scikit-learn, 是基于 Python 语言的机器学习工具:简单高效的数据挖掘和数据分析工具。
- NumPy,是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
- 以下代码导入本文中使用到的库函数
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn import metrics
from sklearn import preprocessing
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import KFold
导入数据集并进行简单操作
- 导入数据集
data = load_boston()#导入数据集
- 将数据集转化为panda,并将房价加入到数据集
data_pd =pd.DataFrame(data.data,columns=data.feature_names) #将数据集数据转换成panda
data_pd['price'] = data.target #把房价加入到数据集中
- 对数据集的基本操作
操作 | 代码 |
---|---|
查看数据类型 | data_pd.dtypes.value_counts() |
查看空值 | data_pd.isnull().sum() |
查看数据大小 | data_pd.shape |
查看数据描述 | data_pd.describe |
显示前五行数据 | data_pd.head() |
计算属性X的最小值 | data_pd.min(X) |
计算属性X的最大值 | data_pd.max(X) |
计算属性X的平均值 | data_pd.mean(X) |
计算属性X的中值 | data_pd.median(X) |
计算属性X的标准差 | data_pd.std(X) |
如果想要查看以上操作的输出结果,使用print (XXX) 即可
计算数据集中属性与价格属性的相关系数并绘图
- 计算每一个属性和价格的相关系数
data_pd.corr()['price']
- 绘制相关系数特征图
corr = data_pd.corr()
corr = corr['price']
corr.sort_values().plot.bar()
plt.show()
3. 当然我们还可以对相关系数做出一些限定,例如,另相关系数>0.5.
corr = data_pd.corr()
corr = corr['price']
corr[abs(corr)>0.5].sort_values().plot.bar()
plt.show()
X属性和房价的散点图
由相关系数特征图我们可以明确,属性LSTAT、RM、PTRATIO和房价的相关系数最高,因此我们选定 LSTAT、RM、PTRATIO作为X,并绘制其和房价的散点图
- LSTAT和价格price散点图
plt.scatter (data_pd['LSTAT'],data_pd['price'])
2. RM和price的散点图
plt.scatter (data_pd['RM'],data_pd['price'])
3. PTRATIO和price的散点图
plt.scatter (data_pd['PTRATIO'],data_pd['price'])
由以上三个图片可知,图三属性和房价关系不是很紧密,而图一二中属性和房价息息相关。
- 当然我们可能需要绘制多张散点图,并包含表头,坐标轴表示含义等。这样的情况下,如果分开来写我们的代码就会非常冗杂,那么我们可以完成一个绘制散点图的函数,在需要绘图的时候直接调用即可。
def drawScatter(x, y, xlabel):
plt.scatter(x, y)
plt.title('%s与房价散点图' %xlabel)
plt.xlabel(xlabel)
plt.ylabel('房价')
plt.yticks(range(0,60,5))
plt.grid()
plt.show()
处理训练集和测试集数据
- 制作训练集和测试集数据
data_pd = data_pd[['LSTAT','PTRATIO','RM','price']]
y = np.array(data_pd['price'])
data_pd=data_pd.drop(['price'],axis=1)
X = np.array(data_pd)
- 分割训练集和测试集
train_X,test_X,train_Y,test_Y = train_test_split(X,y,test_size=0.2)
进行预测
# 加载模型
linreg = LinearRegression()
# 拟合数据
linreg.fit(train_X,train_Y)
# 进行预测
y_predict = linreg.predict(test_X)
# 计算均方差
metrics.mean_squared_error(y_predict,test_Y)