波士顿房价数据集包含了506处波士顿不同地理位置的房产的房价数据(因变量),和与之对应的包含房屋以及房屋周围的详细信息(自变量),其中包含城镇犯罪率、一氧化氮浓度、住宅平均房间数、到中心区域的加权距离以及自住房平均房价等13个维度的数据,因此,波士顿房价数据集能够应用到回归问题上。
导入数据集,一共有506个样本,每个样本有13个特征和一个标签。
from sklearn import datasets
boston = datasets.load_boston()
x,y=boston.data,boston.target
print(x.shape,y.shape)
输出:
(506, 13) (506,)
划分训练集和测试集,将25%的数据作为测试数据。
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25)
print(x_train.shape,x_test.shape)
输出:
(379, 13) (127, 13)
调用模型,喂入样本集训练模型,并查看模型的参数。
from sklearn import linear_model
model1 = linear_model.LinearRegression()
model1.fit(x_train,y_train)
print(model1.intercept_,model1.coef_)
输出:
41.44831393168136 [-1.09607344e-01 4.93241364e-02 8.11847499e-03 1.51614629e+00
-2.00282023e+01 3.45058552e+00 6.49471562e-03 -1.56915664e+00
2.83142778e-01 -1.22744675e-02 -1.00347444e+00 7.87689317e-03
-5.05841246e-01]
使用训练好的模型预测测试集的结果,并用均方误差查看预测值和实际值的距离。
from sklearn.metrics import mean_squared_error
y_pre = model1.predict(x_test)
print(mean_squared_error(y_pre,y_test))
输出:
19.449203405407975
作用于每一列,即将以样本的某一个特征作为整体进行标准化,将数据映射的指定区间(一般为0-1)内。归一化的最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景
x = x − min max − min x=\frac{x-\min }{\max -\min } x=max−minx−min
用sklearn进行归一化:
from sklearn.preprocessing import MinMaxScaler
mm = MinMaxScaler()
testData1 = [[90, 2, 10, 40],[60, 4, 15, 45],[75, 3, 13, 46]]
testData1Scaler = mm.fit_transform(testData1)
print(testData1Scaler)
输出:
[[1. 0. 0. 0. ]
[0. 1. 1. 0.83333333]
[0.5 0.5 0.6 1. ]]
作用于每一列,通过对原始数据进行变换,使数据均值为0,方差为1。
x = x − m e a n σ x=\frac{x-mean}{\sigma } x=σx−mean
用sklearn进行标准化:
from sklearn.preprocessing import StandardScaler
std = StandardScaler()
testData2 = [[1., -1., 3.], [2., 4., 2.],[4., 6., -1.]]
testData2Std = std1.fit_transform(testData2)
print(testData2Std)
输出:
[[-1.06904497 -1.35873244 0.98058068]
[-0.26726124 0.33968311 0.39223227]
[ 1.33630621 1.01904933 -1.37281295]]
重新定义一个模型,使用标准化处理数据以后再进行预测。
x_train_std = std.fit_transform(x_train)
x_test_std = std.fit_transform(x_test)
model2 = linear_model.LinearRegression()
model2.fit(x_train_std,y_train)
y_pred = model2.predict(x_test_std)
print(mean_squared_error(y_pred,y_test))
输出:
21.22212356638021