八.用sklearn实现线性回归、标准化和归一化

目录

  • 1.数据集简介
  • 2.使用sklearn的线性回归模型进行预测
    • (1)数据集
    • (2)划分数据
    • (3)训练模型
    • (4)预测和评价
  • 3.归一化
  • 4.标准化
  • 5.标准化波士顿房价数据后进行预测

1.数据集简介

波士顿房价数据集包含了506处波士顿不同地理位置的房产的房价数据(因变量),和与之对应的包含房屋以及房屋周围的详细信息(自变量),其中包含城镇犯罪率、一氧化氮浓度、住宅平均房间数、到中心区域的加权距离以及自住房平均房价等13个维度的数据,因此,波士顿房价数据集能够应用到回归问题上。

2.使用sklearn的线性回归模型进行预测

(1)数据集

导入数据集,一共有506个样本,每个样本有13个特征和一个标签。

from sklearn import datasets
boston = datasets.load_boston()
x,y=boston.data,boston.target
print(x.shape,y.shape)

输出:

(506, 13) (506,)

(2)划分数据

划分训练集和测试集,将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)

(3)训练模型

调用模型,喂入样本集训练模型,并查看模型的参数。

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]

(4)预测和评价

使用训练好的模型预测测试集的结果,并用均方误差查看预测值和实际值的距离。

from sklearn.metrics import mean_squared_error
y_pre = model1.predict(x_test)
print(mean_squared_error(y_pre,y_test))

输出:

19.449203405407975

3.归一化

作用于每一列,即将以样本的某一个特征作为整体进行标准化,将数据映射的指定区间(一般为0-1)内。归一化的最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景
x = x − min ⁡ max ⁡ − min ⁡ x=\frac{x-\min }{\max -\min } x=maxminxmin
用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.        ]]

4.标准化

作用于每一列,通过对原始数据进行变换,使数据均值为0,方差为1。
x = x − m e a n σ x=\frac{x-mean}{\sigma } x=σxmean
用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]]

5.标准化波士顿房价数据后进行预测

重新定义一个模型,使用标准化处理数据以后再进行预测。

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

你可能感兴趣的:(机器学习实战)