新手可以上天池或者是kaggle上下载数据,我就是在天池上的学习赛找模型进行学习的。

当我们拿到一个csv后,就要审视这个文档里的数据。我现在在做的模型就是有关客户贷款违约的一个比赛吧。那么首先要导入这个数据啊,这个csv分为两个数据集,一个是train,另外两个是test,就是说这个这个比赛的意义就是通过训练集的训练(训练集的数据量是很大的)然后将调教好的模型用于测试集,分数越高越好。

附上链接

零基础入门金融风控-贷款违约预测相关的问题-天池大赛-阿里云天池

拿到数据后呢,我们首先要审视一下数据,至于task2提到的数据可视化,我的指导老师认为,在实际的商业案例中,用来做ppt的,你再开始建模的时候呢,完全不用管好了。首先是导入数据。这边导入数据是要用到一些包的,上午我看到一文章说,现在都爱pandas,产生的是dataframe(一个矩阵形式,有行有列)。好,那我们就要把它从本地文件导入到jupyter里面,其实导入到python里,这里代码这样写

train = pd.read_csv('C:\\Users\harrison.huang\\Desktop\\train (1).csv')

pd是包pandas的简写。记住是双斜杠,如果单斜杠不行的话。

ok,接下来,这些数据,比如说有些位置他是没有值的,就好像你的数据存在收集不到,或者是说误删了怎么样。那么你要宏观的了解一下那些数据缺失了。数值特征就是说数值,对象特征就是说以包含了其他的字符。这里我们要分开这两个数据。类别型也是对象型特征。

numerical_fea = list(train.select_dtypes(exclude=['object']).columns)
category_fea = list(filter(lambda x: x not in numerical_fea,list(train.columns)))

运行完这个命令之后就可以将类别型变量和数值型变量分别开了。

1、熵值法建模:不需要类别型变量,那就清除

代码:data.drop(category_fea)。所以清除函数drop()。

比赛数据相比真实场景的数据相对要干净一些,现实场景中,例如你从银行收到数据,但是你会发现很多数据都是大片大片缺失的,在这种情况下,就要认真考虑数据值如何填充的问题了,比如说,如果是时间序列的一个数据(股价),那么现在的价格就很大程度上受到了上一时期数据的影响,因此,可以使用上面一格的数据直接填充。那么对于横截面数据,可以观察这个数据的分布。如果是呈正态分布的,那么就可以取中位数或者平均数。

在补充缺失值之前,我们需要将缺失值太多的列直接删去,一般缺失值大于百分之50的列,以及全部都是一样的值的列,就都可以删去了,因为没有什么太大的意义。

删除列的代码:

def remcolumns(data):
    t = int(0.5*data.shape[0])
    data = data.dropna(thresh=t,axis=1)#保留至少含有百分之50数据的列
    #data = data.loc[:, (data != 0).any(axis=0)]
    return data

def del_rows(data):
    t = int(0.7*data.shape[1])
    data = data.dropna(thresh=t)#保留至少有 百分之70数据的行
    #data = data[(data.T != 0).any()]
    return data
data = remcolumns(data)
data = del_rows(data)
data

失值填充代码:

1、把所有缺失值替换为指定的值0。   data = data.fillna(0)

2、用缺失值上面的值替换缺失值。  data = data.fillna(axis=0,method = 'ffill')

3、纵向用缺失值下面的值替换缺失值,且设置最多只填充两个连续的缺失值

data = data.fillna(axis=0 ,method = 'bfill',limit= 2)

4、用这一列的平均值替代  data_clean = data.fillna(data.mean())

axis的重点在于方向,而不是行和列。1表示横轴,方向从左到右;0表示纵轴,方向从上到下。

关于ffill和bfill的区别,附上链接:填补缺失值的两种方法ffill和bfill_zyq_go的博客-CSDN博客_ffillPandas填充缺失值两种方法:bfill/ffill对比https://blog.csdn/weixin_43041009/article/details/106567123?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164679381616780264058637%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164679381616780264058637&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-106567123.pc_search_result_cache&utm_term=ffill%E5%92%8Cbfill&spm=1018.2226.3001.4187

在对部分数据进行这个数据填充时,经常会遇到一些机器无法是识别的类型特征(例如带汉字的),这个时候就要把这个汉字按照规律转化为数字,就是所谓的类别转换,就是为了机器可以较好的识别。

补上数据缺失的部分后,这时,我们就要开始异常值的处理了。异常值,即在数据集中存在不合理的值,又称离群点(outlier)。下面这个链接讲的很好,都去看看。

数据分析 第五篇:异常值分析 - 悦光阴 - 博客园异常值在统计学上的全称是疑似异常值,也称作离群点(outlier),异常值的分析也称作离群点分析。异常值是指样本中出现的“极端值”,数据值看起来异常大或异常小,其分布明显偏离其余的观测值。异常值分析是https://wwwblogs/ljhdo/p/5061297.html

异常值的处理目前来说,我接触了两种,一种就是所谓的3segema检验,大家学概率论与数理统计的时候就应该学习过。这里我的业界老师说,这个不咋用,大多数都用箱线图。那么接下来我们认真研究一下箱线图

首先我们要了解一下四分位点内距(Inter-Quartile Range,IQR),是指在第75个百分点与第25个百分点的差值,或者说,上、下四分位数之间的差,计算IQR的公式是:IQR = Q3 − Q1 。

通常,把小于 Q1 - 1.5 * IQR 或者大于 Q3 + 1.5 * IQR的数据点视作离群点,探测离群点的公式是:outliers =  value < ( Q1 - 1.5 * IQR )  or value > ( Q3 + 1.5 * IQR )

这种探测离群点的方法,是箱线图默认的方法,箱线图提供了识别异常值/离群点的一个标准:

异常值通常被定义为小于 QL - l.5 IQR 或者 大于 Qu + 1.5 IQR的值,QL称为下四分位数, Qu称为上四分位数,IQR称为四分位数间距,是Qu上四分位数和QL下四分位数之差,其间包括了全部观察值的一半。

如果,我们在特征工程部份进行了分箱,那么就可以不用进行异常值处理??(老师说的)所以说特征工程就是在建模之前,把数据给彻底的整理好,

写到这,我认为我还是需要再了解一下特征工程。下面附上链接。

什么是特征工程?如何进行特征工程?_Machine Learning with Turing's Cat-CSDN博客_特征工程我的机器学习教程「美团」算法工程师带你入门机器学习 已经开始更新了,欢迎大家订阅~任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~目录...https://blog.csdn/qq_39521554/article/details/78877505?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164620496316780271953543%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164620496316780271953543&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-78877505.pc_search_result_cache&utm_term=%E7%89%B9%E5%BE%81%E5%B7%A5%E7%A8%8B&spm=1018.2226.3001.4187

 接下来就是对特征进行筛选。

当数据预处理完成后,我们需要选择有意义的特征输入机器学习的算法和模型进行训练。通常来说,从两个方面考虑来选择特征:

1、特征是否发散:如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么用。

2、特征与目标的相关性:这点比较显见,与目标相关性高的特征,应当优选选择。除方差法外,本文介绍的其他方法均从相关性考虑。

首先是过滤法(fliter):方差选择法,相关系数法

 

 

ok,那么说,我们已经知道存在一个θ,但是要把它如何找出来呢?这里涉及代价函数和梯度

首先,我们可能出现如下的这种多凸函数,但是我们要找的就是最低点,因此可能找的是极小值不是最小值,所以我们要从开始就找下降最快的这个方向,以达到最低点。

不断下降后,找到的最低点,就是能够成为分界线的θ值。

接下来,学习xgboost了

白话机器学习算法理论+实战番外篇之Xgboost_Miracle8070-CSDN博客_白话机器学习算法

更多推荐

初学者上手python建模