作业-机器学习-预测功率和电流之间的关系
# -*- coding:utf-8 -*-
#预测功率和电流之间的关系,并画图展示
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd
from pandas import DataFrame
import time
#设置字符集,防止中文乱码
mpl.rcParams['font.sans-serif']=[u'simHei']
mpl.rcParams['axes.unicode_minus']=False
path1='datas/household_power_consumption.txt'
df=pd.read_csv(path1,sep=';',low_memory=False)#没有混合类型的时候可以通过low_memory=F调用更多内存,加快效率)
#print(df.head(n=5))
#print(df.info())
# 异常数据处理(异常数据过滤)
new_df = df.replace('?',np.nan)#替换非法字符为np.nan
datas = new_df.dropna(axis=0,how = 'any') #只要有一个数据为空,就进行删除操作
#print(datas.describe().T) #观察数据的多种统计指标
#功率和电流之间的关系
X = datas.iloc[:200,2:4]
Y2 = datas.iloc[:200,5]
## 数据分割
X2_train,X2_test,Y2_train,Y2_test = train_test_split(X, Y2, test_size=0.2, random_state=0)
## 数据归一化
scaler2 = StandardScaler()
X2_train = scaler2.fit_transform(X2_train) # 训练并转换
X2_test = scaler2.transform(X2_test) ## 直接使用在模型构建数据上进行一个数据标准化操作
## 模型训练
lr2 = LinearRegression()
lr2.fit(X2_train, Y2_train) ## 训练模型
## 结果预测
Y2_predict = lr2.predict(X2_test)
## 模型评估
print("电流预测准确率: ", lr2.score(X2_test,Y2_test))
print("电流参数:", lr2.coef_)
## 绘制图表
#### 电流关系
t=np.arange(len(X2_test))
plt.figure(facecolor='w')
plt.plot(t, Y2_test, 'r-', linewidth=2, label=u'真实值')
plt.plot(t, Y2_predict, 'g-', linewidth=2, label=u'预测值')
plt.legend(loc = 'lower right')
plt.title(u"线性回归预测功率与电流之间的关系", fontsize=20)
plt.grid(b=True)
plt.show()