05-计算最小二乘

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()

你可能感兴趣的:(05-计算最小二乘)