11.18 机器学习-线性回归(重点)-最小二乘法
# 分类对离散型结果的数据进行预测,线性回归对连续性结果的数据
# 连续性数据和离散型的区别
# 标称数据的特点: 离散 不能数学运算
# 1. **无序性**:标称数据的各个类别之间没有固有的顺序关系。例如,“性别”可以分为“男”和“女”,但“男”和“女”之间不存在大小、高低等顺序关系。
# 2. **非数值性**:标称数据不能进行数学运算,因为它们没有数值含义。你不能对“颜色”或“品牌”这样的标称数据进行加减乘除。
# 3. **多样性**:标称数据可以有很多不同的类别,具体取决于研究的主题或数据收集的目的。
# 4. 比如西瓜的颜色,纹理,敲击声响这些数据就属于标称型数据,适用于西瓜分类
# 连续型数据的特点包括: 能数学运算
# 1. **可测量性**:连续型数据通常来源于物理测量,如长度、重量、温度、时间等,这些量是可以精确测量的。
# 2. **无限可分性**:连续型数据的取值范围理论上是无限可分的,可以无限精确地细分。例如,你可以测量一个物体的长度为2.5米,也可以更精确地测量为2.53米,甚至2.5376米,等等。
# 3. **数值运算**:连续型数据可以进行数学运算,如加、减、乘、除以及求平均值、中位数、标准差等统计量。
# 在数据分析中,连续型数据的处理和分析方式非常丰富,常见的有:
# - **描述性统计**:计算均值、中位数、众数、标准差、四分位数等,以了解数据的中心趋势和分布情况。
# - **概率分布**:通过拟合概率分布模型,如正态分布、指数分布、伽玛分布等,来理解数据的随机特性。
# - **图形表示**:使用直方图、密度图、箱线图、散点图等来可视化数据的分布和潜在的模式。
# - **回归分析**:建立连续型变量之间的数学关系,预测一个或多个自变量如何影响因变量。
# - 比如西瓜的甜度,大小,价格这些数据就属于连续型数据,可以用于做回归
# 回归就是求回归方程的回归系数的过程
# 说到回归,一般都是指线性回归(linear regression)。线性回归意味着可以将输入项分别乘以一些常量,再将结果加起来得到输出。
# 线性回归是机器学习中一种**有监督学习**的算法,**回归问题**主要关注的是**因变量**(需要预测的值)和一个或多个数值型的**自变量**(预测变量)之间的关系.
# 损失函数
# 一个坐标系中有一个点集 拟合一条直线 去表示这些点 这条线这么取呢?
# 均方差
# 点到线的竖直方向的距离 的平方和 再平均 最小时 这条线最好 估计值与真实值的差距为误差 每个点的误差加起来为总误差 为了避免-号 给每个点的误差平均平方 再加起来
# 平均误差 就是每个点的 预测值-真实值的平方的和在/n 这个就是损失函数
# 平均误差就是损失函数就是均方差
# 目前先令 拟合的线都经过原点 即 y=wx+b b=0
# 已经知道了 一个数据集 列出他的损失函数
# 带入全部的值得到了一个损失值与w的一元2次方程 求损失函数的导数=0是w的值 w的值再带回去 即y的值最小时w的值
# 多参数回归
# 就是不止wx 可能还有其他的变量 多加了很多个未知数
# 均方差为 求y最小的时候 全w1w2w3....的值
# y=(w1x1+...+wnxn-y真)^2+....+.../n
# 用高斯最小二乘法求
# 矩阵的乘法
# 矩阵的除法 A矩阵*A矩阵的转置 = 一个方阵 方阵可以求逆矩阵 方针乘逆矩阵为 单位矩阵 然后矩阵乘单位矩阵为自己 这样变换代替除法
# 链式求导 复合函数求导
#
# API
# sklearn.linear_model.LinearRegression()
# 功能: 普通最小二乘法线性回归, 权重和偏置是直接算出来的,对于数量大的不适用,因为计算量太大,计算量太大的适合使用递度下降法
# 参数:
# fit_intercept bool, default=True
# 是否计算此模型的截距(偏置)。如果设置为False,则在计算中将不使用截距(即,数据应中心化)。
# 属性:
# coef_ 回归后的权重系数 即W
# intercept_ 偏置 即b
# print("权重系数为:\n", estimator.coef_) #权重系数与特征数一定是同样的个数。
# print("偏置为:\n", estimator.intercept_)
from sklearn.linear_model import LinearRegression
import numpy as np
def linear_regression():
model1=LinearRegression(fit_intercept=False) # fit_intercept 是否计算偏置b 它计算完之后有两个重要的属性 系数coef_ 权重即W 截距intercept_偏置 即b
data=np.array([[0,14,8,0,5,-2,9,-3,399],
[-4,10,6,4,-14,-2,-14,8,-144],
[-1,-6,5,-12,3,-3,2,-2,30],
[5,-2,3,10,5,11,4,-8,126],
[-15,-15,-8,-15,7,-4,-12,2,-395],
[11,-10,-2,4,3,-9,-6,7,-87],
[-14,0,4,-3,5,10,13,7,422],
[-3,-7,-2,-8,0,-6,-5,-9,-309]])
x=data[:,0:8]
y=data[:,8:]
model1.fit(x,y)
x_new=[[11,14,8,10,5,10,8,1]] # 定义一个新的数据拿去预测
y_pre=model1.predict(x_new)
print(y_pre)
# print(model1.intercept_)
if __name__=="__main__":
linear_regression()
pass