参考代码:https://blog.csdn.net/snoopy_yuan
该部分主要是基于模型的预测;
包括数据预处理(处理数据不平衡问题),LR模型预测等;
数据预处理部分思想:首先数据严重不平衡(1:3k),这里采用下采样的办法处理;为避免下采样失去了数据原本的分布特征,所以先使用kmeans聚类;然后在每个类别上取sub_sample;与正样本组成训练集。
1. 机器学习中数据不平衡的处理:
数据不平衡:数据分布不均匀;
解决方法:
1)采样:又分为上采样和下采样;
上采样:复制多遍小规模的数据;
下采样:删除部分大规模的数据;
2)数据合成
3)一分类
4)加权
详见参考链接;
参考:https://www.cnblogs.com/zhaokui/p/5101301.html
2. 归一化处理
对不同度量尺度的特征进行归一化处理,使用sklearn.preprocessing.StandardScaler()
下面是用逻辑回归解决该问题:
1. 回顾了一下逻辑回归是什么(其实是重新学习了一下= =)
简单来说,对于一个二分类问题,设最终分类目标为y,其有两个取值0或1。训练的目的就是,输入一个特征向量x,训练得到参数w和b,首先得到z,再通过激活函数f(z),将取值限制在(0,1)之间。f(z)可以理解为y=1的后验概率,即P(y=1|x)。
在逻辑回归中,激活函数取sigmod函数,其是在负无穷到正无穷上的连续函数,取值在(0,1)之间。
(公式不好写 这里就不写了。以上纯粹是为了个人理一下思路。)
z=wx+b, y=f(z);
逻辑回归的损失函数:
上面已经说了,可以将f(z)理解为y取正类的概率;则根据极大似然原理(?),该组训练样本在所有可能样本中出现的可能性最大,所以将各f(z)相乘;即要找使得乘积最大的参数w和b。
然后再一顿操作,(详见参考网址),得到损失函数。
参考:https://blog.csdn.net/zjuPeco/article/details/77165974
2. panda的sample方法:
功能:数据的取样;
参数:frac:取数据中的百分之多少;
n:取数据中的多少条;
参考:https://blog.csdn.net/qq_22238533/article/details/71080942
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sample.html
3. pandas的as_matrix()方法:
(表示看不懂这个方法什么意思)
4. numpy的concatenate()方法:
功能:就是把两个数组,DataFrame也好,[ [] ]也好,摞在一起;有两种摞的方法,用参数axis控制。
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
np.concatenate((a, b), axis=0)
array([[1, 2],
[3, 4],
[5, 6]])
np.concatenate((a, b.T), axis=1)
array([[1, 2, 5],
[3, 4, 6]])
参考:https://blog.csdn.net/u013713117/article/details/54587555
0618继续补充
5. 关于k-means聚类;
简介:k-means,硬聚类算法,是基于距离的;
算法过程:
1)从初始点中选取k个点,作为簇的中心,即质心;
2)对其余每一个点,根据其距簇中心点的距离,将其归类到某一个簇;
3)对于形成的各簇,从新计算各簇的质心;
4)重复2)、3)过程,直至新质心与原质心相同,或距离小于某阈值;
要点:
1)最后的结果是聚类成了k类;
2)在python中,可以通过XXX方法实现。(待补充)
6. 数据归一化处理
归一化处理的目的:消除特征件不同量纲的影响。
(不同量纲的意思,举个栗子:
预测房价,其中房屋中卧室的数量和坐地面积都是特征;卧式数量取值大概在1,2,3,即10十以内的数字。(不排除超大的房子有几十个卧式,已经超出我的想象力了)。而坐地面积基本上在100平米左右(同样贫穷限制了我的想象力)。则在建立损失函数的模型时,关于这两个特征,损失函数是一个扁平的形状。(在坐地面积轴上,损失函数下降速度慢;在卧式数量轴上,下降速度快,(因为取值范围小,所以每变化一下,对损失函数值影响程度大)。)。这对模型训练带来影响:训练速度慢;也会影响训练结果。因此要进行数据归一化处理,让所有特征取值处于同一数量等级。
)栗子完毕。
两种常用归一化方法:
1)Standardization,量化后的特征服从标准正态分布;
量化后的特征分布在[-1,1]区间。
2)Min-Max Scaling
量化后的特征分布在[0,1]区间。
7. 关于sklearn.preprocessing.StandardScaler:
首先这是个类,可以用来实例化对象:
scaler_1=preprocessing.StandardScaler()
作用:计算数据集的均值和标准差;
与preprocessing.scale的区别:
preprocessing.StandardScaler(),可以保存训练数据集的均值和标准差,用来实现对测试数据集进行相同的变换;
几个方法:
scaler_1.fit(X) #对数据集X,计算均值和标准差;
scaler_1.transform(Y) # 对测试数据集Y进行相同的变换;
问题:emm什么叫相同的变换?为什么要进行相同的变换?(大概知道原因);但为什么?
参考:http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html
https://blog.csdn.net/csmqq/article/details/51461696
8. 关于MiniBatchKMeans:
是个类;
mbk_1=MiniBatchKMeans(init='k-means++',n_cluster=8,batch_size=100)
参数解释:
init,不懂;
n_cluster,分成几簇;
batch_size,不懂;(所以我到底解释了些什么=。=)
具体参数看官方介绍,即如下链接。(感叹,有啥问题还是得看官方解释,再看个栗子,所向披靡。嘻。)
一个重要方法:
mbk_1.fit(X) #得到数据集X的质心;
属性:
mbk_1.labels_:每个点的label;
注意点:
与Kmeans的区别:
在每次迭代过程中,对数据进行抽样,不适用所有数据进行计算;即,确定质心后,从数据集中选取小批量数据,把他们分配给最近的质心。选取的小批量数据的数据量取决于参数:batch_size。
参考:http://scikit-learn.org/stable/modules/generated/sklearn.cluster.MiniBatchKMeans.html
与kmeans的区别:https://blog.csdn.net/sinat_26917383/article/details/70240628
第二部分:关于LR模型部分的解释:
1. 机器学习中的准确率,召回率等的解释:
真正率:做出positive的判断,且判断正确;
假正率:做出positive的判断,但判断错误;
真负率:做出negative的判断,且判断正确;
假负率:做出negative的判断,但判断错误。
precision = TP / (TP + FP)
recall = TP / (TP + FN)
accuracy = (TP + TN) / (TP + FP + TN + FN)
F1 Score = P*R/2(P+R),其中P和R分别为 precision 和 recall
若模型训练得到了几个模型,通常选择在验证集上F1 Score值最大的一个。
参考:https://blog.csdn.net/simplelovecs/article/details/50520602
第三部分:RF模型部分的解释:
1. 随机森林的简介:
用于分类问题;可以理解为由多个决策树组成,每个决策树决定一个类别;随机森林集中各分类结果,将次数最多的类别作为最终类别;
大致过程是:构造每一颗决策树;
每颗决策树的构造:
设总的训练数据集中样本数为N,总特征数为M;
1)从N个样本中,随机不放回的抽取N个数据;
2)对于决策树中的每个节点,从M个特征中选取m个特征(m应远小于M);从这m个特征中按一定规则选取一个特征,作为当前节点;
详见另一篇博客:https://blog.csdn.net/shelly_Chestnut/article/details/80729338
2.