简单线性回归
📅 2026-1-22机器学习库 sklearn
引入 python 库 import,提取 sklearn 中需要用到的线性回归模型:
import numpy as np
from sklearn import linear_model
# 'linear_model' sklearn中专门用于处理线性回归的模型
相较于:
import sklearn
这种方式避免了直接将整个 sklearn 库都加入,能够节省更多内存。
简单线性回归模型
简单线性回归模型不需要对数据进行归一化处理。
一个例子:对运输里程,运输次数,运输时间之间的关系,建立多元线性回归模型。
# 定义数据集
# 数据格式:[运输里程, 运输次数, 运输时间]
x = np.array([
[100, 4, 9.3], [50, 3, 4.8], [100, 4, 8.9],
[100, 2, 6.5], [50, 2, 4.2], [80, 2, 6.2],
[75, 3, 7.4], [65, 4, 6], [90, 3, 7.6], [90, 2, 6.1]
])
# 创建多元特征数组作为输入矩阵,创建结果向量。
# 此例子需要用到的特征是运输里程和运输次数 (取前两列)
X = x[:, :-1]
# 结果向量是运输时间 (取最后一列)
Y = x[:, -1]
print(X, Y)
# 使用 linear_model() 训练简单线性回归的斜率和截距
# 新建一个以 linear_model.LinearRegression() 为模板的线性回归模型
regr = linear_model.LinearRegression()
# .fit() 输入特征矩阵和结果向量
regr.fit(X, Y)
# regr.coef_ 将斜率矩阵输出出来,每个特征对应一个斜率
print('coefficients(b1,b2...):', regr.coef_)
# 创建一组测试集
x_test = np.array([[102, 6], [100, 4]])
y_test = regr.predict(x_test)
print('Predictions:', y_test)
分类型变量独热编码处理
对于分类型变量,例如车型变量,在训练回归模型前需要进行独热编码处理。
训练集数据变为[100,4,1,9.3],其中新增的1表示该样本属于某个特定类别。
在sklearn中,DictVectorizer用于处理分类型变量的独热编码。
from sklearn.feature_extraction import DictVectorizer # 导入独热编码处理模块
x_trans=[] # 存放转换后的数据
for i in range(len(x)):
x_trans.append({'type':str(x[i][2])}) # 将分类型变量转换为字典格式
vec = DictVectorizer(sparse=False) # 创建独热编码转换器
dummyX = vec.fit_transform(x_trans) # 进行独热编码转换
X = np.concatenate((x[:, :2], dummyX), axis=1) # 拼接原有特征和独热编码特征
需要注意的是DictVectorizer需要类型变量为字典格式
检查新的特征矩阵X是否正确包含独热编码后的特征。
print(X,Y)
print(dummyX)
其结果应该类似如下
[[100. 4. 0. 1. 0.] # 车型为1的独热编码
[ 50. 3. 1. 0. 0.] # 车型为0的独热编码
[100. 2. 0. 0. 1.]]# 车型为2的独热编码
[9.3 4.8 8.9] # 结果向量
[[0. 1. 0.]
[1. 0. 0.]
[0. 0. 1.]] # 独热编码矩阵