数据:现在有20W条有关功率和电流的数据,数据中包括:日期、时间、有功功率、无功功率、电压、电流、厨房用电功率、洗衣服用电功率、热水器用电功率。
方法:最小二乘法
模型:通过这些数据训练一个模型(目标函数也叫损失函数),通过模型来进行预测。
最小二乘法的一般形式:
目标函数=∑(观测值−理论值)*(观测值−理论值)
通过数据来寻找一个最小的目标函数(损失函数)
实现
# -*- coding: utf-8 -*-
# 引入所需要的全部包
from sklearn.model_selection import train_test_split # 数据划分的类
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd
## 设置字符集,防止中文乱码
mpl.rcParams['font.sans-serif']=[u'simHei']
mpl.rcParams['axes.unicode_minus']=False
# 加载数据
# 日期、时间、有功功率、无功功率、电压、电流、厨房用电功率、洗衣服用电功率、热水器用电功率
path1 = 'data/household_power_consumption.txt'
df = pd.read_csv(path1, sep=';', low_memory=False)
# 没有混合类型的时候可以通过low_memory=False调用更多内存,加快效率
## 功率和电流之间的关系
X = df.iloc[:2000, 2:4]
print(X.index)
# print(X)
Y2 = df.iloc[:2000, 5]
# print(Y2)
## 数据分割
X2_train, X2_test, Y2_train, Y2_test = train_test_split(X, Y2, test_size=0.33, random_state=0)
# 将X和Y转换为矩阵的形式
X = np.mat(X2_train).astype(float)
Y = np.mat(Y2_train).astype(float).reshape(-1, 1)
# X = np.mat(X2_train)
# Y = np.mat(Y2_train).reshape(-1, 1)
# X = X.astype(float)
# Y = Y.astype(float)
# print(X)
#
# # 计算θ
theta = (X.T * X).I * X.T * Y
#
# # 对测试集合进行测试
# y_hat = np.mat(X2_test) * theta
y_hat = np.mat(X2_test).astype(float) * theta
#
# # 画图看看
# # 功率与电流关系
t = np.arange(len(X2_test))
plt.figure(facecolor='w')
plt.plot(t, Y2_test, 'r-', linewidth=2, label=u'真实值')
plt.plot(t, y_hat, 'g-', linewidth=2, label=u'预测值')
plt.legend(loc='lower right')
plt.title("线性回归预测功率与电流之间的关系", fontsize=20)
plt.grid(b=True)
plt.show()
样本占比为0.2时预测结果:
样本占比为0.33时预测结果:
这里使用Sklearn-train_test_split 划分数据集,它的使用形式:
1 from sklearn.model_selection import train_test_split
2 X_train, X_test, y_train, y_test = train_test_split(train_data,train_target,test_size=0.2, random_state=0)
参数说明:
train_data:样本特征集
train_target:样本的标签集
test_size:样本占比,测试集占数据集的比重,如果是整数的话就是样本的数量
random_state:是随机数的种子。在同一份数据集上,相同的种子产生相同的结果,不同的种子产生不同的划分结果
X_train,y_train:构成了训练集
X_test,y_test:构成了测试集
例子说明:
import numpy as np
from sklearn.model_selection import train_test_split
X, y = np.arange(10).reshape((5, 2)), range(5)
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.33, random_state=42)
最小二乘法适用场景
最小二乘法适用简洁高效,比梯度下降这样的迭代法似乎方便很多。
最小二乘法局限性
资源下载
资源下载
总的地址
https://github.com/ai-word
1.机器学习,深度学习,图像处理,NLP技术知识
机器学习,深度学习,图像处理,NLP技术知识下载地址
2. Rust,Go,Python,JavaScript,C/C++实现的leetCode,练习算法,总结算法
Rust,Go,Python,JavaScript,C/C++实现的leetCode,练习算法,总结算法,应用算法知识下载地址
3. C/C++,Go,Python,Rust,JavaScript数据结构,算法等相关知识总结,以实际项目中遇到的问题
包含了C/C++,Go,Python,Rust,JavaScript数据结构,算法等相关知识总结,以实际项目中遇到的问题知识下载地址
4. 编程语言记录,Rust语言,Go语言,Python语言,Lua语言,C/C++…基本知识
编程语言记录,Rust语言,Go语言,Python语言,Lua语言,C/C++…基本知识下载地址
5.记录JavaScript,CSS,webApp,混合开发,nodeJs及相关框架点滴及各自的典型应用知识下
记录JavaScript,CSS,webApp,混合开发,nodeJs及相关框架点滴及各自的典型应用知识下载地址
6.包含了前端技术方案,后端技术解决方案,架构相关知识,以实际项目中为基础进行分析总结
包含了前端技术方案,后端技术解决方案,架构相关知识,以实际项目中为基础进行分析总结;除此之外还包括Docker打包技术,k8s容器集群管理,ngnix,数据库等相关技术知识下载地址