首先解释一下超平面的含义

超平面是n维欧氏空间中余维度等于一的线性子空间,也就是必须是(n-1)维度。

这是平面中的直线、空间中的平面之推广(n大于3才被称为“超”平面),是纯粹的数学概念,不是现实的物理概念。

因为是子空间,所以超平面一定经过原点。

详细描述(百度百科):

几何体中,超平面是一维小于其环境空间的子空间。 如果空间是3维的,那么它的超平面是二维平面,而如果空间是二维的,则其超平面是一维线。 该概念可以用于定义子空间维度概念的任何一般空间。

在不同的设置中,超平面的对象可能具有不同的属性。 例如,n维仿射空间的超平面是尺寸为n-1的平坦子集。由于其性质,它将空间分成两个半空间。 n维投影空间的超平面不具有此属性。

在几何形状中,n维空间V的超平面是尺寸为n-1的子空间,或等价于V中的代数1。空间V可以是欧几里德空间,或更一般地是仿射空间,或向量空间或投影空间和超平面的概念因为这些设置中子空间的定义不同而相应变化。然而,在所有情况下,任何超平面可以在坐标中作为单个的解(由于“1”约束)的等式1的代数方程给出。

如果V是向量空间,则区分“向量超平面”(它们是线性子空间,因此必须通过原点)和“仿射超平面”(不需要通过原点);它们可以通过向量的平移来获得超平面。欧几里德空间中的超平面将该空间分成两个半空间,并定义了一个映射,该映射固定了超平面,并将两个半空间交换。

 线性回归的目标:学习一组权重参数进而在预测时尽可能的接近真实值

其实就是一个优化任务:找到让成本函数最小化的一组权重

数据科学当中一个非常让人头疼的问题是数据的来源,下面利用scikit-learn中“自带”的经典数据集:70年代波士顿市区房价数据集来进行学习,数据集存放在:

C:\Users\user\AppData\Roaming\Python\Python36\site-packages\sklearn\datasets\data\boston_house_prices.csv

可以用代码直接导入

注:OpenCV当中没有好的模型实现线性回归(fitLine的性能堪忧)

使用LinearRegression()——普通最小二乘法,参看官网,写的很详细:

 

 

结果图:

好像有点问题,但是用法就是这样,先看代码:


# ——创建时间:2019.2.27——
# OpenCV回归模型

import numpy as np
from sklearn import datasets
from sklearn import metrics
from sklearn import *
from sklearn import model_selection as modsel
from sklearn import linear_model
import matplotlib.pyplot as plt

boston = datasets.load_boston()  # 直接载入自带数据集
# print(boston)
print(dir(boston))  # 查看数据集的分类
# 选用百分之20的数据进行验证
x_train, x_test, y_train, y_test = modsel.train_test_split(
    boston.data,boston.target,test_size=0.2,random_state=42
)
linreg = linear_model.LinearRegression()
linreg.fit(x_train,y_train)  # 记住sklearn中训练方法是fit!
metrics.mean_squared_error(y_train,linreg.predict(x_train))  # 计算均方误差
r2 = linreg.score(x_train,y_train) # 计算确定系数
# 做出图像
plt.figure(figsize=(10,6))
plt.plot(y_test,linewidth = 3,label='真实值')
plt.plot(y_train,linewidth = 3,label='预测值')
plt.xlabel('测试数据点')
plt.ylabel('目标值')
plt.show()

首先是matplotlib显示中文乱码问题,这个问题之前碰到过,一段时间没有用忘了,加上

matplotlib.rcParams['font.sans-serif'] = ['KaiTi']
matplotlib.rcParams['font.serif'] = ['KaiTi']

 完美解决。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐