1. 机器学习的一些概念(有监督、无监督、泛化能力、过拟合欠拟合(方差和偏差以及各自解决办法)、交叉验证)
有监督:用于训练的数据集有groundtruth,数据集已标注;
无监督:用于训练数据集无标注;
泛化能力:是指机器学习算法对新鲜样本的适应能力。学习的目的是学到隐含在数据对背后的规律,对具有同一规律的学习集以外的数据,经过训练的网络也能给出合适的输出,该能力称为泛化能力。
过拟合:对训练数据过分依赖,产生了高拟合度,但是对于测试数据的分类结果较差;
欠拟合:是和过拟合相对的现象,可以说是模型的复杂度较低,没法很好的学习到数据背后的规律。
交叉验证:是一种统计学上将数据样本切割成较小子集的实用方法,因数据集的样本数有限,于是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set or test set),首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型(model),以此来做为评价分类器的性能指标。
2. 线性回归的原理
线性:函数的一种逻辑关系,x和y满足或近似满足方程:y=wx+b;
回归:通过降低计算y和Y(数据集提供的参数)的差异,即最大拟合y与Y,来找到最佳的w和b来描述线性方程。
3. 线性回归损失函数、代价函数、目标函数的概念
损失函数:计算一个样本的误差;如:L1, L2(范式);
代价函数:是所有样本误差的平均,也就是损失函数的平均;
目标函数:定义为:最终需要优化的函数。如:y=wx+b;
通过代价函数最小化,来逐步优化目标函数的参数。
4. 一元线性回归的参数求解公式推导
一元线性回归的参数为w和b,为对隐含层和输出层的节点分别计算其w,根据梯度下降的方法(链式求导),先计算输出层节点,再根据其结果计算隐含层节点。
5. 多元线性回归的参数求解公式推导
多元线性回归的参数求导,可以看做一元的向量形式进行操作,一元是标量形式。
6. 线性回归的评估指标有哪些?原理是什么?
线性回归的评价指标有四种:
均方误差 MSE
均方根误差RMSE
平均绝对值误差MAE
R平方 R2S (R^2越大越好)
sklearnz中使用的是R Squared方法。
原理:最大程度拟合y和Y。
7. sklearn参数详解(sklearn包里面线性回归的每个参数的作用)
- 导入sklearn数据集:
from sklearn import datasets
- 创建数据集:
datasets.make_blobs([n_samples,n_features,...])
数据预处理:
from sklean import preprocessing
归一化:
#基于mean和std的标准化
scaler=preprocessing.StandardScaler().fit(train_data)
scaler.transform(train_data)
scaler.transform(test_data)
#将每个特征值归一化到一个固定范围
scaler=preprocessing.MinMaxScaler(feature_range=(0,1)).fit(train_data)
scaler.transform(train_data)
scaler.transform(test_data)
#feature_range:定义归一化范围
正则化
X_normalized=preprocessing.normalize(X,norm='l2')
- 数据集拆分
train_test_split(*arrays,**options)
from sklean.modl_selection import train_test_split
X_train, X_test, y_train, y_test= train_test_split(X, y, test_size=0.3, random_state=42)
- 定义模型
#拟合模型
model.fit(X_train, y_train)
#模型预测
model.predict(X_test)
#获取模型参数
model.get_params()
#为模型进行打分
model.score(data_X, data_y)
线性回归:
from sklean.linear_model import LinearRegression
model= LinearRegression(fit_intercept=True, normalize=False,copy_X=True, n_jobs=1)
fit_intercept:是否计算截距b,False标识模型没有截距,即b=0;
normalize:当fit_intercept为真时有效,回归前的回归系数x将通过减去平方值并除以L2范数而进行归一化;
n_jobs:是指定线程数。