美文网首页
Join the #100DaysOfMLCode

Join the #100DaysOfMLCode

作者: 雨宝_f737 | 来源:发表于2018-10-31 19:43 被阅读0次

    Follow https://github.com/Avik-Jain/100-Days-Of-ML-Code

    Day1

    预处理数据的步骤:

    1.导入numpy和pandas,numpy是对矩阵和向量进行科学运算非常方便,pandas是管理数据集的。

    2.使用pandas读入数据集,数据集通常是csv格式的,使用pandas的read_csv函数读取数据,默认第一行为列名。

    (1).loc/.at和..iloc/.iat,第一个参数进行行选择,第二个参数进行列选择,区别在于前者使用的是index和column中的值来索引(左右都包含),后者是下标从0开始的下标(左包含右不包含);.ix是混合索引,index+column+下标,如果index+column指定是整数,则不会当作下标,当访问不存在的值时否则会出错;

    df[]中括号中是列名,列名组成的list会访问列,数字组成的切片会访问行。

    df.只能进行列选择,不能进行行选择。

    https://www.cnblogs.com/jiaxin359/p/8995133.html

    (2)dataframe.values返回的是Numpy中的ndarray,dataframe中index用来标识行,columns标识列,shape表示维度。

    (3)apply()是一种让函数作用于列或者行操作,applymap()是一种让函数作用于DataFrame每一个元素的操作,而map是一种让函数作用于Series每一个元素的操作

    3.处理缺失数据

    sklearn.preprocessing.Imputer中axis=0代表列axis=1代表行,imputer.fit是计算相关参数,transform是在数据上进行操作。

    4.处理类别型数据

    labelEncoder是把离散数据编码为递增的编号,OneHotEncoder是跟离散值的个数一样的维度且其中某一维为1。

    5.将数据分成训练集和验证集

    cross_validation的train_test_split()方法有一个参数是random_state,设置随机数种子,如果设置为固定的数每次划分的结果则是一样的,便于下次验证实验结果。

    6.特征归一化

    训练集和测试集分开进行归一化

    缺失值处理/类别型数据编码/特征变换/特征选择/降维都实现了fit()/transform()/fit_transform,那么这里的fit()和模型训练中的fit()有何关系,其实都是从中分析特征和目标值,从中提取有价值的信息,特征提取类提取的是某些统计量,模型训练提取的是模型的权重等。transform()主要对特征进行转换,转换无需要信息时就不需要fit(),需要信息的时候就需要fit(),需要的信息又分为有监督(特征和目标值)无监督(特征)。参考:https://www.jianshu.com/p/ddfe1909b8db

    一般会把train和test集放在一起做标准化,或者在train集上做标准化后,用同样的标准化器去标准化test集,此时可以用scaler

    scaler = sklearn.preprocessing.StandardScaler().fit(train)

    scaler.transform(train)

    scaler.transform(test)

    https://blog.csdn.net/u012102306/article/details/51940147

    fit()函数只能接收[[]]这样的数据,[]这样的数据不能放进去。

    Day 2线性回归 涉及矩阵求导,使用最小二乘法进行参数估计,即求导令导数为0

    矩阵求导https://zhuanlan.zhihu.com/p/24709748

    基于均方误差最小化来进行模型求解的方法称为最小二乘法(least square method)

    1.预处理数据

    cross_validation模块被弃用了,改为支持model_selection这个模块

    2.训练线性模型

    3.预测结果

    4.可视化

    使用matplotlib.pyplot()的话在pycharm中必须进行plt.show()才能显示图形。

    Day 3多元线性回归

    一元线性回归求导,令导数为0得到

    多元线性回归求导公式

    dummy variable:虚拟变量/哑变量/离散变量编码

    虚拟变量存在陷阱:多重共线性,一个变量可由另一个变量推导出来,故类别变量编码后我们只用m-1个列,剩余那个列能被其他列推导出来。

    OneHotEncoder中的categorical_features = []选择对哪些特征进行类别编码,字符串数据必须先转为数值型数据才能使用sklearn中的OneHotEncoder,返回的是稀疏矩阵。

    Day 4逻辑回归

    广义线性回归问题解决的是原本线性回归模型无法描述的非线性y,对y进行某些非线性映射,变成线性回归模型可以描述的即可。逻辑回归是将联系函数取为对数几率函数的广义线性回归模型。参考https://zhuanlan.zhihu.com/p/39363869

    逻辑回归输出的概率代表在给定的样本的情况下,预测的值有多大可能性跟真实值相同,在二分类的情况下,输出的概率表示样本为正样本的概率,损失函数便定义为在正样本情况下,概率越大越好,负样本的情况下,概率越小越好。https://www.cnblogs.com/richqian/p/4511557.html

    LogisticRegression属于线性sklearn.linear_model模块,调参必备:https://www.cnblogs.com/ysugyl/p/8711205.html。

    使用极大似然估计(Maximum likelihood method)来估计参数,对率回归的求导过程如图所示分为两种求导方式一种采取求和方式另一种采取矩阵方式。梯度下降法进行参数更新与牛顿法更新,牛顿法使用二阶导数来估计目标函数值。将参数的变化量作为自变量,求解函数得到最小值的时候函数变化量为多少,从而进一步更新参数。参数应该如何变化的推导如下,牛顿法公式https://blog.csdn.net/u012526120/article/details/48897135

    牛顿法和拟牛顿法

    https://www.cnblogs.com/ljy2013/p/5129294.html

    https://blog.csdn.net/majinlei121/article/details/47260917

    疑问:为什么西瓜书上的似然项和统计上的不一样,最后推出的结果是一样的?

    Day7 KNN

    KNN是一个非参数化的模型不需要对数据分布做出任何假设,可用在分类和回归上。

    Day12SVM

    SVM可用在回归和分类上,大多数用于分类任务。四个参数:Kernel;gamma;regulatizetion;magin。

    优化问题可转换为求拉格朗日函数的极小极大问题,进而通过对偶转换为求极大极小问题,因为有条件约束,所以才能转换为极小极大问题,同时需要使用KKT条件体现出那些约束。

    SVM求导过程:先固定alpha,求关于w/b的极小值,令导数为0,然后求关于alpha的极大值,使用SMO算法。

    Day13 Naive Beyes Classifer

    贝叶斯决策过程为已知后验概率和类分错的损失,选择一个最优的决策模型,准确分类。最小化总体风险也是最小化每个样本的期望损失,如果我们的目标是最小化分类错误率,损失为分错为1分对为0,期望损失变为样本x属于其他类的概率,最小化损失即为最大化样本属于c的概率,即后验概率。

    如何获取后验概率?两种模型:判别式模型和生成式模型。判别式模型是直接学习出给定x获得类别c的模型,如决策树/NN/支持向量机;对于生成式模型,首先对x和c建立联合概率分布模型,进而获得后验概率。

    对于生成式模型,建模x和c联合概率分布模型,即类先验概率乘以类条件概率(似然)。类先验概率统计样本即可获得,类条件概率涉及所有属性的联合概率,可取的值太多,无法准确统计。估计类条件概率常用策略为先假设其具有某种确定的概率分布形式,再基于训练样本对概率分布的参数进行估计。这又引出来了参数估计,两大阵营:一个阵营叫频率主义学派认为参数虽然未知但是固定的,我们只需要根据样本求出它;另一大阵营为贝叶斯学派认为参数是变化的,样本是固定的,参数具有某种分布,先假设参数服从一个先验分布,然后基于观测到的数据计算参数的后验分布。

    对于频率注意学派,使用极大似然估计参数,即为在参数的所有取值下,选择一个使得数据出现的可能性最高的值。由于似然中的连乘操作容易引起下溢,最大化似然转换为最大化对数似然。

    D14

    sklearn.metrics:

    TPR(True Positive Rate):真正率,在正样本中真正被分对的比例

    FPR(False Positive Rate):假正率,在负样本中被分错的比例

    截断点:概率取某个值样本被划分到正例/反例。

    将截断点不同取值下对应的TPR和FPR结果画于二维坐标系中得到的曲线,就是ROC曲线。

    相关文章

      网友评论

          本文标题:Join the #100DaysOfMLCode

          本文链接:https://www.haomeiwen.com/subject/qegatqtx.html