[机器学习案例]回归算法--预测功率与电流之间关系

数据:现在有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时预测结果:
[机器学习案例]回归算法--预测功率与电流之间关系_第1张图片
样本占比为0.33时预测结果:
[机器学习案例]回归算法--预测功率与电流之间关系_第2张图片

这里使用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)

最小二乘法适用场景

最小二乘法适用简洁高效,比梯度下降这样的迭代法似乎方便很多。

最小二乘法局限性

  1. 最小二乘法需要计算XTX的逆矩阵,有可能它的逆矩阵不存在,这样就没有办法直接用最小二乘法了,此时梯度下降法仍然可以使用。
  2. 当样本特征n(特征维度超过1000)非常的大的时候,计算XTX的逆矩阵是一个非常耗时的工作(nxn的矩阵求逆),甚至不可行。
  3. 如果拟合函数不是线性的,这时无法使用最小二乘法,需要通过一些技巧转化为线性才能使用,此时梯度下降仍然可以用。
  4. 讲一些特殊情况。当样本量m很少,小于特征数n的时候,这时拟合方程是欠定的,常用的优化方法都无法去拟合数据。
    参考:

资源下载
资源下载
在这里插入图片描述
总的地址
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,数据库等相关技术知识下载地址

你可能感兴趣的:(1.机器学习与算法笔记,8.Python应用知识笔记)