一.初识机器学习
看了好多的模型训练文档,一直对数据的输入和输出感到有点懵,还好大佬点醒,少了好多头脑斗争,下面戳重点见图:
二.关于线性回归
线性回归是一种有监督的学习算法,它介绍的自变量的和因变量的之间的线性的相关关系,分为一元线性回归和多元的线性回归。一元线性回归是一个自变量和一个因变量间的回归,可以看成是多元线性回归的特例。线性回归可以用来预测和分类,从回归方程可以看出自变量和因变量的相互影响关系。
三.关于Linear Regression
LinearRegression就是最常见普通的线性回归,一般来说,只要我们觉得数据有线性关系,LinearRegression类是我们的首先。如果发现拟合或者预测的不好,再考虑用其他的线性回归库。如果是学习线性回归,推荐先从这个类开始第一步的研究。Scikit中的LinearRegression类对损失函数的优化用的是最小二乘法。
四.数据预处理
数据预处理就是上面所说的将输入空间的不足进行改进从而形成特征空间的过程,这里介绍两种:
1.libsvm数据格式的读取
libsvm的数据格式如下:
[label] [index1]:[value1] [index2]:[value2] …
[label] [index1]:[value1] [index2]:[value2] …
sklearn读取libsvm格式数据:
from sklearn.datasets import load_svmlight_file
filename = "../data/sample_linear_regression_data.txt"
data = load_svmlight_file(filename)
X, y = data[0], data[1]
# X为输入空间, y为输出空间
读取出来的数据输入空间X为稀疏矩阵,例如:
(0, 0) 0.455127360066
(0, 1) 0.36644694352
(0, 2) -0.382561089335
(0, 3) -0.445843019852
: :
(498, 5) 0.609961550497
(498, 6) -0.804744062432
(498, 7) -0.687785611426
(498, 8) 0.584300402178
需要对稀疏矩阵转换为完整特征矩阵
有两种方式
X.todense()
X.toarray()
2.数据归一化
具体思路是将每一项特征内的数据分布看成独立的标准正态分布, 通过求解均值与分差, 将每一项数据映射为[-1,1]的正态数据.
好处就是:
(1)归一化能够加快梯度下降的步伐,也就是获得最优解的速度
(2)归一化能够提交模型的精度
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler(with_mean=False).fit(X)
features = scaler.transform(X)
五.模型实现
from sklearn import linear_model
clf = linear_model.LinearRegression()
clf.fit(input_data,output_data)
print clf.coef_ # 得到相关系数
print clf.intercept_ # 得到截距