大家好这里是X,上个星期的机器学习忘记更新知识点了,实属抱歉,这一周算是将上一周的一起汇总了,知识点都是相通的,都是线性回归问题🤞🤞🤞除了知识点还有一些老师在上课的杂七杂八的知识,有点乱,大家不要见外🐾🐾
文章目录
- 多元线性回归
- 我们转化成机器学习过程:
- β \beta β的求法
-
Y=X β \beta β
多元线性回归
我们转化成机器学习过程:
1、明确任务
线性回归任务
2、数据个数
两个—>X,Y
3、评估
用哪一种模型呢?
怎么处理误差?
减少误差的方法?
用其他模型造成的影响会小一些吗?
4、训练
训练的结果如何?
拟合------预测-----评估
train_test_split()用来划分数据块–>4块👇👇👇
如果对这个方法不理解的朋友,可以先去看一下我写的这篇博客:传送门
一般大致过程分析
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=3)
大致解题过程为:
import time
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train, y_train)
train_score = model.score(X_train, y_train)
cv_score = model.score(X_test, y_test)
print('train_score: {0:0.6f}; cv_score: {1:.6f}'.format(train_score, cv_score))
β \beta β的求法
其实在之前,简单线性回归的时候,就已经讲过了这个参数的求法了,那么在这里又继续来求解这个参数,里有非常简单,之前的是简单的线性回归,是一元的,而现在是多元的,所以在求法上是不一样,现在面对的数据也是不一样的,具体多元和简单线性回归之间的区别到底是什么,并且这个
β
\beta
β值的含义又有什么很大的改变,大家可以去看看这篇博客,我觉得还不错,写的很详细:传送门2
知道了
β
\beta
β参数的具体含义之后以下是求解办法:
我简单的将式子表达为:
Y=X
β
\beta
β
这个时候可能大家会认为两边同时除以X,就可以得到
β
\beta
β,但是并不是这样的,因为直接除以一个矩阵是不可行的,然而除以一个整数等同于乘以一个整数的倒数,我们就可以通过乘以矩阵X的逆矩阵来避免矩阵除法,但是只有方阵可以求逆,但是矩阵X不一定是方阵,所以我们又可以将X乘以其转置来产出一个可以求逆的方阵
所以
β
\beta
β的求法就为:
β
\beta
β=(XTX)-1XTY
可能会用到的方法:
np.reshape(x, new_shape):改变x的形状,得到新的数组。
np.mean(x):计算x的均值。
np.sum(x):计算x的和。
np.std(x):计算x的标准差。
np.dot(x, y):计算数组x和y的乘积。如果x和y都是矩阵,就是矩阵乘法。
np.transpose(x):计算数组x的转置。
np.linalg.inv(x):计算数组x的逆。
np.concatenate((x1, x2, x3, x4), axis=a):计算将数组x1、x2、x3、x4在维度a上拼接起来。
代码实现:
from numpy import dot,transpose
from numpy.linalg import inv
one = np.ones((X.shape[0], 1))
Xp = np.concatenate((one, X),axis=1)# 这里的axis=1的表示按照列进行合并
p1 = dot(transpose(Xp),Xp)
p2 = inv(p1)
p3 = dot(transpose(Xp), y)
p4 = dot(p2,p3)
print(p4)
可以看到在这里还多了一位成员:one,这是为什么呢?
因为在计算的过程中,我们会漏掉另一个重要的参数:
α
\alpha
α
不相信的话你自己可以先试试,,会发现这个变量直接被秒掉了,所以这个添加多一列就是为了不要让
α
\alpha
α被秒掉,这样得到的结果也会更加精确
在Numpy中其实也提供了一个最小二乘函数,这样可以让代码非常的简洁:
from numpy.linalg import lstsq
X=[[1,2,3],[1,4,5],[1,6,7],[1,13,20],[1,2,4]]
Y=[[1],[2],[3],[4],[5]]
print(lstsq(X,Y)[0])
利用这个方法可以直接得到结果
后续介绍几种不同的模型,以及对管道的理解~~~