机器学习一般就是三个步骤:数据预处理,构建model,model优化
常见的机器学习问题分为两类:回归问题,分类问题。
回归问题又分为Linear regression和Logistic regression,在建模时首先一定要分析清楚是什么类型的问题,千万不要把PLA问题和logistic regression问题弄错。
台湾大学林轩田教授讲解的PLA和逻辑斯蒂回归问题让人很容易理解,不懂的可以去看。
简单来说,分类问题是将原有的数据以源数据为目标分为不同的种类,但是logistic regression是将数据回归到目标类值上,就像下面两张图
分类问题大多用KNN算法进行求解,也就是K临近算法,也就是看目标值的临近值最多属于哪个类别,该目标值就是那一类,KNN算法关键在于设置K值,K值不同得到的结果也会不同。
下面着重聊聊回归问题:
regression问题顾名思义,回归问题,比较有难度的一种问题了吧,在做的时候重点在于数据预处理这方面,要注意特征向量如果是固定的几个值,需要对数据进行离散化,也就是人常说的onehotencoding,如果是散乱分布的数据,注意观察数据是在一定的范围内,比如数据都在10-20,突然出现一个100,这时候需要对数据进行收缩,目的是对这个数据做惩罚,避免这一个数据使model造成过拟合的情况,甚至做出来的model不回归。
对于缺失数据,如果数据量很大,缺失数据很少,那么这部分loss可以忽略。如果数据缺失在非常重要的特征向量中而且缺失很多,那么建议联系DBA找回来,实在找不回来的话,也不建议用其他值代替,因为填入的值很有可能成为noise添加进模型中。建议将数据分为两部分,NULL和NOT NULL,分别处理之后组合起来,也会很完美。
刚开始建模的时候,接触的model无非就是decision tree了,后来可能就接触到了randomforest,这俩东西确实无敌,如何选取呢?
可能大家都认为randomforest的决策效果要比decision tree强很多,其实没有那么绝对,如果特征向量很少的话,那么还是建议使用decision tree,特征向量多的话,可以使用randomforest,当然也要适当调整tree的数量,以及每棵tree的深度,等等。
在无敌的randomforest面前很少用人能想到直接使用linear regression或者logistic regression进行model的构建,这两个regression在后期优化的时候相对于randomforest要容易很多,因为优化randomforest不仅需要考虑数据的优化处理,还要考虑如何处理forest中的每棵树,这两个regression在优化的时候会容易很多,将模型需要的固定的参数设置好之后,只需要考虑数据的优化就ok,所以一般情况下,如果问题很明显能看出来是哪类问题,建议还是不要使用forest了,直接使用regression,岂不快哉?
如果可以的话,也可以使用神经网络进行建模,神经网络是深度学习的基础,构建完神经网络,需要使用反传播算法进行优化,原理是从输出层开始往前逐步将该激活神经元的输出输入值通过该神经元计算后,计算该边的权重是否合适,之后对该边进行调整,注意反传播算法的传播迭代的次数,以及学习速率,还有weighted,迭代效果随迭代次数的增加而减小,学习速率和weighted不建议弄太大,越细小越稳,同时要求迭代次数越多。
构建model的时候最大的问题莫过于参数的设置,可以使用gridsearchcv将你所想的参数做成dict,然后传入CV,让cv自动寻找最佳参数组合,切记使用cv的时候,不要一次性把所有的参数作进去,先设置一个大概范围,看cv的结果,之后在每个参数的大范围中缩小范围,逐步找到最优参数组合,当然如果你的电脑可以的话,你可以一下子全部设置进去。
构建model的时候可以不要一下子把所有的特征值填进model中,先选取一部分重要的特征值,之后在逐步优化的时候将剩余数据一点一点添加进去。这样做的好处是避免优化数据的时候不知从何下手,哪些数据应该怎么处理,怎么结合分不清楚。