madlib支持mysql_技术干货:用madlib学习『机器学习』之KNN

1. 前言

机器学习(ML)分为:监督学习,无监督学习,半监督学习等。

1.1 监督学习(supervised learning)

监督学习是训练神经网络和决策树的常见技术,高度依赖事先确定的分类系统给出的信息,对于神经网络,分类系统利用信息判断网络的错误,然后不断调整网络参数。对于决策树,分类系统用它来判断哪些属性提供了最多的信息。

从给定的训练数据集中学习出一个函数,当新的数据到来时,可以根据这个函数预测结果。

监督学习的训练集要求包括输入输出,也可以说是特征和目标,训练集中的目标是由人标注的。

常见的有监督学习算法:回归分析和统计分类,最典型的算法是KNN和SVM。

有监督学习最常见的就是:regression & classification

Regression:Y是实数向量,回归问题,就是拟合(x,y)的一条曲线,使得价值函数(cost function) L最小。

10c7b003e12d?utm_source=oschina-app

Classification:Y是一个有穷数(finite number),可以看做类标号,分类问题首先要给定有label的数据训练分类器,故属于有监督学习过程,分类过程中cost function l(X,Y)是X属于类Y的概率的负对数。

10c7b003e12d?utm_source=oschina-app

其中fi(X)=P(Y=i/X)。

有监督学习方法必须要有训练集与测试样本,在训练集中找规律,而对测试样本使用这种规律。

有监督学习的方法就是识别事物,识别的结果表现在给待识别数据加上了标签,因此训练样本集必须由带标签的样本组成。

1.2 名词KNN

k-Nearest Neighbors

在一个给定的数据点上找出k个最近的数据点,在分类的情况下输出输出类的多数投票值,以及在回归情况下目标值的平均值。

2.撸袖子

2.1 新新相映

软件是基于最新的postgresql 10.0加上最新的madlib 1.12。

为了操作方便,我这里使用基于docker的ubuntu 16.04安装madlib,这样以后就可以拿着这个镜像到处嗨了,以下操作就是在MAC里面进行的。

2.2 查看madlib版本

#selectmadlib.version();

10c7b003e12d?utm_source=oschina-app

2.3 导入训练数据

DROP TABLE IF EXISTSknn_train_data;

CREATE TABLEknn_train_data(

idinteger,

datainteger[],

labelfloat

);

INSERT INTOknn_train_dataVALUES

(1,'{1,1}',1.0),

(2,'{2,2}',1.0),

(3,'{3,3}',1.0),

(4,'{4,4}',1.0),

(5,'{4,5}',1.0),

(6,'{20,50}',0.0),

(7,'{10,31}',0.0),

(8,'{81,13}',0.0),

(9,'{1,111}',0.0);

SELECT*fromknn_train_dataORDERBYid;

10c7b003e12d?utm_source=oschina-app

2.4 导入测试数据

DROP TABLE IF EXISTSknn_test_data;

CREATE TABLEknn_test_data(

idinteger,

datainteger[]

);

INSERT INTOknn_test_dataVALUES

(1,'{2,1}'),

(2,'{2,6}'),

(3,'{15,40}'),

(4,'{12,1}'),

(5,'{2,90}'),

(6,'{50,45}');

SELECT*fromknn_test_dataORDERBYid;

10c7b003e12d?utm_source=oschina-app

2.5 分类训练

DROP TABLE IF EXISTSmadlib_knn_result_classification;

SELECT*FROMmadlib.knn(

'knn_train_data',--训练数据表名

'data',--训练数据所在列

'label',--训练标签

'knn_test_data',--测试数据表名

'data',--测试数据所在列

'id',--测试数据列名id

'madlib_knn_result_classification',--结果输出

'c',--分类

3--最近相邻数

);

2.6查看分类输出结果

SELECT*frommadlib_knn_result_classificationORDERBYid;

10c7b003e12d?utm_source=oschina-app

图形化示例:

10c7b003e12d?utm_source=oschina-app

2.7 进行回归

DROP TABLE IF EXISTSmadlib_knn_result_regression;

SELECT*FROMmadlib.knn(

'knn_train_data',--训练数据表名

'data',--训练数据所在列

'label',--训练标签

'knn_test_data',--测试数据表名

'data',--测试数据所在列

'id',--测试数据列名id

'madlib_knn_result_regression',--结果输出

'r',--回归

3--最近相邻数

);

2.8 查看回归输出结果

SELECT*frommadlib_knn_result_regressionORDERBYid;

10c7b003e12d?utm_source=oschina-app

图形化示例:

10c7b003e12d?utm_source=oschina-app

3.小结

postgresql提供了对结构化数据的存储和加工的便捷,madlib提供了ML算法的支持,强强联手,相得益彰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值