1、使用机器学习模型时,一般怎么处理数据集
- 离散值的处理: 因为离散值的差值是没有实际意义的。比如如果用0,1,2代表红黄蓝,1-0的差值代表黄-红,是没有意义的。因此,我们往往会把拥有d个取值的离散值变为d个取值为0,1的离散值或者将其映射为多维向量。
- 属性归一化: 归一化的目标是把各位属性的取值范围放缩到差不多的区间,例如[-0.5,0.5]。这里我们使用一种很常见的操作方法:减掉均值,然后除以原取值范围。
- 分割数据集: 一般把数据集分为两部分,一部分为训练集,用于训练数据,一部分为测试集,用于测试训练的数据,测试集不应过多或过少,数据较少时训练集:测试集可以为8:2,较多时比例可以达到9:1 。
2、什么是训练误差和测试误差
- 泛化能力:机器学习的目标是使学得的模型能够很好的适用于新的样本,而不是仅仅在训练样本上工作的很好。学得的模型对新样本(即新鲜数据)的适应能力称为泛化能力。
- 误差:学习到的模型在样本上的预测结果与样本的真实结果之间的差 。
- 训练误差:模型在训练集上的误差。
- 泛化误差(测试误差):在新样本上的误差。
- 显然,我们更希望得到泛化误差小的模型。
3、什么是过拟合与欠拟合?怎么解决
- 欠拟合:学得的模型训练误差很大的现象。
- 过拟合:学得的模型的训练误差很小,但泛化误差大(泛化能力较弱)的现象。
解决过拟合的方法:
- 正则化(Regularization)(L1和L2)。
- 数据增强(Data augmentation),也就是增加训练数据样本。
- Dropout
L1、L2正则化是通过改动代价函数来实现的,而Dropout则是通过改动神经网络本身来实现的,它是在训练网络时用的一种技巧(trike)。
- early stopping
对模型进行训练的过程即是对模型的参数进行学习更新的过程,这个参数学习的过程往往会用到一些迭代方法,如梯度下降(Gradient descent)学习算法。Early stopping便是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。
欠拟合是指模型在训练集、验证集和测试集上均表现不佳的情况
解决方法:
1. 模型复杂化
• 对同一个算法复杂化。例如回归模型添加更多的高次项,增加决策树的深度,增加神经网络的隐藏层数和隐藏单元数等。
• 弃用原来的算法,使用一个更加复杂的算法或模型。例如用神经网络来替代线性回归,用随机森林来代替决策树等。
2. 增加更多的特征,使输入数据具有更强的表达能力
• 特征挖掘十分重要,尤其是具有强表达能力的特征,往往可以抵过大量的弱表达能力的特征,特征的数量往往并非重点,质量才是,总之强特最重要。
• 能否挖掘出强特,还在于对数据本身以及具体应用场景的深刻理解,往往依赖于经验。
3. 调整参数和超参数
• 超参数包括:神经网络中的学习率、学习衰减率、隐藏层数、隐藏层的单元数、Adam优化算法中的β1和β2参数、batch_size数值等。其他算法中:树模型(随机森林、GBDT、xgboost)的树数量,k-means中的cluster数,正则化参数λ等。
4. 增加训练数据往往没有用
• 欠拟合本来就是模型的学习能力不足,增加再多的数据给它训练它也没能力学习好,因此,正如方法2一样,高质量的数据是前提,正如BAT这些大公司,为什么算法模型很强,那是因为平台积累的数据质量足够好。
5. 降低正则化约束
• 正则化约束是为了防止模型过拟合,如果模型压根不存在过拟合而是欠拟合了,那么就考虑是否降低正则化参数λ或者直接去除正则化项,与过拟合相反操作。
4、机器学习当中的回归模型有哪些
线性回归模型
线性回归是一种经典的机器学习模型,它建立了自变量和因变量之间线性关系的模型,通过最小化残差平方和来求解最优参数。线性回归适用于特征和目标变量之间存在线性关系的情况。
fromsklearn.linear_modelimportLinearRegression#定义线性回归模型model=LinearRegression() #拟合模型model.fit(X, y) #预测y_pred=model.predict(X_test)
决策树回归模型
决策树回归是一种基于树结构的机器学习模型,它通过递归地将数据集划分为更小的子集,并在每个子集上递归地建立回归模型。决策树回归适用于特征和目标变量之间具有非线性关系的情况。
fromsklearn.treeimportDecisionTreeRegressor#定义决策树回归模型model=DecisionTreeRegressor() #拟合模型model.fit(X, y) #预测y_pred=model.predict(X_test)
支持向量机回归模型
支持向量机回归是一种基于核函数的机器学习模型,它通过找到一个超平面来最小化预测误差和正则化项之和。支持向量机回归适用于特征和目标变量之间具有非线性关系的情况。
fromsklearn.svmimportSVR#定义支持向量机回归模型model=SVR() #拟合模型model.fit(X, y) #预测y_pred=model.predict(X_test)
XGBoost回归模型
XGBoost是一种基于决策树的集成学习算法,它通过梯度提升的方式逐步提升模型的预测性能。XGBoost适用于处理大规模数据和高维特征的情况。
importxgboostasxgb#定义XGBoost回归模型model=xgb.XGBRegressor() #拟合模型model.fit(X, y) #预测y_pred=model.predict(X_test)
LightGBM回归模型
LightGBM也是一种基于决策树的集成学习算法,它采用了一些优化策略,如GOSS和EFB,来提高模型的训练速度和准确性。LightGBM适用于处理大规模数据和高维特征的情况。
/
importlightgbmaslgb#定义LightGBM回归模型model=lgb.LGBMRegressor() #拟合模型model.fit(X, y) #预测y_pred=model.predict(X_test)
神经网络回归模型
神经网络是一种基于人工神经元的机器学习模型,它通过前向传播和反向传播的方式逐步优化模型参数。神经网络适用于特征和目标变量之间具有非线性关系的情况,通常适合处理大规模数据和高维特征。
importtorchimporttorch.nnasnn#定义神经网络模型classNet(nn.Module): definit(self): super(Net, self).init() self.fc1=nn.Linear(10, 5) self.fc2=nn.Linear(5, 1) defforward(self, x): x=torch.relu(self.fc1(x)) x=self.fc2(x) returnx#定义神经网络回归模型model=Net() #定义损失函数criterion=nn.MSELoss() #定义优化器optimizer=torch.optim.SGD(model.parameters(), lr=0.01) #训练模型forepochinrange(100): optimizer.zero_grad() y_pred=model(X) loss=criterion(y_pred, y) loss.backward() optimizer.step() #预测y_pred=model(X_test)
5、机器学习当中的分类模型有哪些
逻辑回归
逻辑回归的本质就由线性回归演变而来,是一个线性分类器。sklearn实现的LogisticRegression不仅可用于二分类,也可以用于多分类。
- 优点:
模型训练速度非常快,计算量只与特征的数目有关。模型的可解释性非常好,从特征的权重可以看到不同特征对最后结果的影响。内存资源占用小,只需要存储特征权重等信息。逻辑回归的抗噪能力比较强。
- 缺点:
若数据集是非线性的,逻辑回归并不能得到很好的结果。逻辑回归对极不平衡的数据集训练效果不好。逻辑回归对数据特征的分布和相关性要求相对较高。逻辑回归本身无法筛选特征。
fromsklearn.linear_modelimportLogisticRegressionfromsklearn.datasetsimportload_breast_cancer#乳腺癌数据集fromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportaccuracy_scoreimportnumpyasnpimportmatplotlib.pyplotasplt%matplotlibinline#获得特征标签数据data=load_breast_cancer() X=data['data'] y=data['target'] #分割训练姐测试集X_train, X_test, y_train, y_test=train_test_split(X, y, test_size=0.3, random_state=1) lr_l1=LogisticRegression(penalty="l1", C=0.5, solver="liblinear") lr_l2=LogisticRegression(penalty="l2", C=0.5, solver="liblinear") #训练模型lr_l1.fit(X_train, y_train) lr_l2.fit(X_train, y_train)
决策树
决策树是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规 则,并用树状图的结构来呈现这些规则,以解决分类和回归问题。
- 优点:
对数据不太敏感,无需做数据预处理。比如归一化、标准化。决策树模型可以进行可视化分析,便于理解和解释。训练速度快。
- 缺点:
容易发生过拟合。泛化能力比较差。容易忽略数据中特征的相关性。
#决策分类树模型训练fromsklearnimporttreeclf=tree.DecisionTreeClassifier(criterion='entropy', random_state=1, splitter='random') clf.fit(X_train, Y_train) clf.score(X_vali, Y_vali) #调参方式和逻辑回归一样,可以使用学习曲线和网格搜索。
决策树可调的参数比较多,criterion(衡量分枝质量的指标)、splitter(分枝策略)、max_depth(树的最大深度)、max_features(做最佳分枝时考虑特征的个数)等等,具体接口参见官方文档。
【数据挖掘】-决策树算法+代码实现
支持向量机
- 优点:
- SVM利用内积核函数代替向高维空间的非线性映射。
- SVM分类决策是由少数的支持向量决定的。计算复杂性取决于支持向量的数目。
- 缺点:
- SVM并不适合大规模训练样本
- SVM不能用于多分类问题
- 对于分类结果有"概率"值要求的不适用
#支持向量机SVMfromsklearn.svmimportSVCclf=SVC(kernel='linear' ,gamma='auto' ,degree=1 ,cache_size=5000).fit(X_train, Y_train) clf.score(X_vali, Y_vali) #调参方式和逻辑回归一样,可以使用学习曲线和网格搜索。
随机森林
随机森林是一个集成算法分类器,其所有的基分类器都是决策树,然后通过装袋法(Bagging)进行集成。
- 优点:
可用于处理高维度的数据,并且不需要做特征选择。训练模型后可以知道哪些特征比较重要。对不平衡数据比较不敏感
- 缺点:
当数据集中有特征数据噪声比较大时,容易出现过拟合。无法知道模型内部的运行,可解释性较差。
#随机森林分类器fromsklearn.ensembleimportRandomForestClassifierrfc=RandomForestClassifier() rfc.fit(X_train, Y_train) rfc.score(X_test, Y_test) #调参方式和逻辑回归一样,可以使用学习曲线和网格搜索。
XGBoost模型
XGBoost模型是一种使用提升法(Boosting)集成的集成分类器,利用许多弱分类器集成在一起形成一个强分类器的模型。
- 优点:
当样本存在缺失值时,XGBoost能自动学习分裂方向。
XGBoost借鉴RF的做法,支持列抽样,不仅能防止过拟合,还能降低计算。
XGBoost的代价函数引入正则化,控制了模型的复杂度,防止模型过拟合。
- 缺点:
XGBoost在迭代之前需要对特征做预排序,大数据集下计算耗时。
XGBoost采用level-wise算法生成决策树,同时分裂同一层的叶子,这样导致很多不必要分裂叶子节点被分裂,带来了不必要的开销。
LightGBM模型
LightGBM模型也是一种使用提升法(Boosting)集成的集成分类器,利用弱分类器(决策树)迭代训练以得到最优模型。
LightGBM提出的主要原因就是为了解决GBDT在海量数据遇到的问题,让GBDT可以更好更快地用于工业实践。
- 优点:
训练速度快。相对XGBoost,采用直方图算法进行样本遍历,极大降低了时间复杂度;训练过程中,采用单边梯度算法过滤梯度小的样本,减少了大量的计算;基于leaf-wise算法的增长策略构建树,减少了很多不必要的计算;同时采用了并行(特征并行、数据并行)的方式加速计算,优化了缓存,增加了缓存命中率。内存消耗更小。
- 缺点:
使用leaf-wise算法可能会长出比较深的决策树,而产生过拟合。
由于LightGBM是基于偏差的算法,所以对噪点数据比较敏感。
6、回归和分类模型的评价指标都有哪些
分类指标
MSE 均方误差、RMSE 均方根误差、MAE 平均绝对误差
分类问题
准确率和错误率、精确率和召回率、PR曲线图、 F1值、ROC、AUC值、 ROC 和 PR。
【数据挖掘】-模型的评估
参考链接: