import numpyas np
import matplotlib.pyplotas plt
x=2*np.random.rand(100,1)
y=4+3*x+np.random.randn(100,1)
# 合并z和x
z=np.ones((100,1))
x_1=np.c_[z,x]
# 通过合并后东x_1计算θ
theta=np.linalg.inv(x_1.T.dot(x_1)).dot(x_1.T).dot(y)
print(theta)
plt.plot(x,y,'b.')
X_new = np.array([[0], [2]])
X_new_b = np.c_[np.ones((2,1)), X_new]# add x0 = 1 to each instance
y_predict = X_new_b.dot(theta)
print(X_new_b)
plt.plot(X_new, y_predict,"r-")
plt.show()
-----------------------------------------------------------------------------------------------------
import numpyas np
import matplotlibas mpl
import matplotlib.pyplotas plt
import pandasas pd
from sklearn.model_selectionimport train_test_split
data=pd.read_csv('../data/household_power_consumption_1000.txt',low_memory=False,sep=';')
'''
查看数据结构:
print(data.info())
Date 1000 non-null object 日期、
Time 1000 non-null object 时间、
Global_active_power 1000 non-null float64 有功功率、
Global_reactive_power 1000 non-null float64 无功功率、
Voltage 1000 non-null float64 电压、
Global_intensity 1000 non-null float64 电流、
Sub_metering_1 1000 non-null float64 厨房用电功率、
Sub_metering_2 1000 non-null float64 洗衣服用电功率、
Sub_metering_3 1000 non-null float64 热水器用电功率
'''
# 获取所有功率
x=data.iloc[:,2:4]
# 获取电流标签集合
y=data.iloc[:,5]
# 拆分训练集合和测试集
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=10)
# print(len(x_train))
# 将训练集X和Y转换为矩阵的形式
x=np.mat(x_train)
y=np.mat(y_train).reshape(-1,1)
# np.linalg.inv()矩阵的逆运算
# 根据标准公式计算θ
theta=np.linalg.inv(x.T.dot(x)).dot(x.T).dot(y)
print(theta)
# 使用测试集进行测试
y_pre=np.mat(x_test).dot(theta)
# 可视化
## 设置字符集,防止中文乱码
mpl.rcParams['font.sans-serif']=[u'simHei']
mpl.rcParams['axes.unicode_minus']=False
x_r=np.arange(len(y_test))
plt.plot(x_r,y_test,'g-',linewidth=2,label='真实电流')
plt.plot(x_r,y_pre,'r-',linewidth=2,label='真实电流')
plt.legend(loc ='lower right')
plt.title(u"线性回归预测功率与电流之间的关系",fontsize=20)
plt.show()