线性回归多项式拟合——家庭用电预测

LinearRegression模型参数

fit_intercept: 训练的模型是否包含截距,默认为为True,表示包含

LinearRegression模型属性

coef_ :模型训练好后的参数列表
intercept_: 截距值

train_test_split方法参数

数据参数:第一个参数是X,第二个参数为Y;
test_size:进行数据划分的时候,测试集占用的比例
train_size: 进行数据划分的时候,训练集占用的比例
要求test_size和train_size只能给定一个
random_state: 随机数种子,所有的随机数种子如果给定的时候都是为了保证多次操作的结果是完全一致的;默认情况下的随机数种子是当前的时间

StandardScaler模型参数

with_mean:在进行数据转换的过程中,是否将数据转换为均值为0的数据(默认为True,表示是)
with_std:在进行数据转换的过程中,是否将数据转换为标准差为1的数据(默认为True,表示是)

StandardScaler模型的属性

mean_:均值
var_:方差

PolynomialFeatures模型参数

degree:给定进行最高多次次幂的扩展
interaction_only: 默认为False;在多项式扩展过程中,
是否考虑同一个特征的多次相乘,是否扩展x1^2或者
x1^2*x2;默认为False,表示扩展;True表示不进行扩展
include_bias:默认为True,是否在多项式扩展的过程中,加入一个常数项,常数项值为1.默认加入

02_家庭用电预测:线性回归算法(时间与电压的多项式关系)
具体过程如下:

import sklearn
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import PolynomialFeatures  #特征构造 
from sklearn.pipeline import Pipeline

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
%config InlineBackend.figure_format = 'svg'
import pandas as pd
import time
## 创建一个时间字符串格式化字符串
def date_format(dt):
    import time
    t = time.strptime(' '.join(dt), '%d/%m/%Y %H:%M:%S')
    return (t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec)
## 设置字符集,防止中文乱码
mpl.rcParams['font.sans-serif']=[u'simHei']
mpl.rcParams['axes.unicode_minus']=False
# 加载数据
path = 'datas\household_power_consumption_200.txt' ## 200行数据
path = 'datas\household_power_consumption_1000.txt' ## 1000行数据
df = pd.read_csv(path, sep=';', low_memory=False)

# 日期、时间、有功功率、无功功率、电压、电流、厨房用电功率、洗衣服用电功率、热水器用电功率
names2=df.columns
names=['Date', 'Time', 'Global_active_power', 'Global_reactive_power', 'Voltage', 'Global_intensity', 'Sub_metering_1', 'Sub_metering_2', 'Sub_metering_3']

# 异常数据处理(异常数据过滤)
new_df = df.replace('?', np.nan)
datas = new_df.dropna(axis=0,how = 'any') # 只要有数据为空,就进行删除操作
## 时间和电压之间的关系(Linear)
# 获取x和y变量, 并将时间转换为数值型连续变量
X = datas[names[0:2]]
X = X.apply(lambda x: pd.Series(date_format(x)), axis=1)
Y = datas[names[4]].values
   

# 对数据集进行测试集合训练集划分 
X_train,X_test,Y_train,Y_test = train_test_split(X, Y, test_size=0.2, random_state=0)

# 数据标准化
ss = StandardScaler()
X_train = ss.fit_transform(X_train) # 训练并转换
X_test = ss.transform(X_test) ## 直接使用在模型构建数据上进行一个数据标准化操作 

# 模型训练
lr = LinearRegression()
lr.fit(X_train, Y_train) ## 训练模型

# 模型校验
y_predict = lr.predict(X_test) ## 预测结果

# 模型效果
print("准确率:",lr.score(X_test, Y_test))

## 预测值和实际值画图比较
t=np.arange(len(X_test))
plt.figure(facecolor='w')
plt.plot(t, Y_test, 'r-', linewidth=2, label=u'真实值')
plt.plot(t, y_predict, 'g-', linewidth=2, label=u'预测值')
plt.legend(loc = 'lower right')
plt.title(u"线性回归预测时间和功率之间的关系", fontsize=20)
plt.grid(b=True)#网格
plt.show()

[234.84 233.63 233.29 233.74 235.68 235.02 235.09 235.22 233.99 233.86
232.86 232.78 232.99 232.91 235.24 237.14 236.73 237.06 237.13 235.84
232.69 230.98 232.21 234.19 234.96 236.66 235.84 235.6 235.49 235.28
235.06 234.17 233.77 233.62 234.68 236.94 237.52 238.2 238.28 236.93
235.01 232.93 232.12 231.85 232.25 234.66 236.2 237.07 235.78 237.43
237.26 234.25 234.2 234.31 233.29 235.61 235.25 236.04 235.51 235.68
235.2 233.74 233.84 233.79 235.5 235.84 236.15 235.81 235.41 234.82
233.76 232.48 233.54 232.32 234.02 234.76 234.67 235.27 235.

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值