kaggle新手入门之路(代码片段)

Limitlessun Limitlessun     2022-10-21     169

关键词:

学完了Coursera上Andrew Ng的Machine Learning后,迫不及待地想去参加一场Kaggle的比赛,却发现从理论到实践的转变实在是太困难了,在此记录学习过程.

 

一:安装Anaconda

教程大多推荐使用Jupyter Notebook来进行数据科学的相关编程,我们通过Anaconda来安装Jupyter Notebook和需要用到的一些python库,按照以下方法重新安装了Anaconda,平台Win10

Anaconda安装

二:Jupyter Notebook

参照以下两篇文章配置好了Jupyter Notebook,学习了相关的基本操作

Jupyter可以做哪些事情

Jupyter Notebook常用快捷键

  • 启动:在cmd或Anaconda Prompt下输入jupyter notebook
  • 新建:Files页面右侧\'New\'
  • 运行当前cell:Ctrl+Enter
  • 代码补全:Tab
  • 查看方法文档:Shift+Tab
  • 复选cell:Shift+上下键
  • 删除cell:双击D
  • 撤销删除:Z
  • 保存当前Notebook:S
  • 关闭文档:Home页面选中文档后\'Shutdown\'
  • 关闭服务器:终端中按两次Ctrl+C
  • 显示matplotlib图表:%matplotlib inline
  • 中断运行:I

三:Numpy

numpy中文教程

官方文档

  • Numpy是一个用于进行数组运算的库
  • Numpy中最重要的对象是称为ndarray的N维数组类型
  • 一般使用如下语句导入:import numpy as np
  • 创建数组:numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
  • 可以用np.dtype()定义结构体
  • 数组维度:ndarray.shape
  • 数组维数:ndarray.ndim
  • 调整数组维度:ndarray.reshape(shape)
  • 创建未初始化数组:numpy.empty(shape, dtype = float, order = \'C\')
  • 创建零数组:numpy.zeros(shape, dtype = float, order = \'C\')
  • 创建一数组:numpy.ones(shape, dtype = float, order = \'C\')
  • 用现有数据创建数组:numpy.asarray(a, dtype = None, order = None)
  • 按数值范围创建数组:numpy.arange(start = 0, stop, step = 1, dtype),类似的有linspace()和logspace()
  • 切片:b=a[start:stop:step],可以用...代表剩余维度
  • 整数索引:每个整数数组表示该维度的下标值,b=a[[r1, r2], [c1, c2]]
  • 布尔索引:返回是布尔运算的结果的对象,可以用&或|连接()分隔的条件
  • 在 NumPy 中可以对形状不相似的数组进行操作,因为它拥有广播功能,我的理解是,广播是一种维度的单方向拉伸
  • 数组迭代:numpy.nditer(ndarray)或ndarray.flat
  • 数组长度:len(arr)
  • 访问第i个元素:一维数组用a[i],多维数组用a.flat[i]
  • 数组转置:ndarray.T
  • 数组分割:numpy.split(ary, indices_or_sections, axis),第二项的值为整数则表明要创建的等大小的子数组的数量,是一维数组则表明要创建新子数组的点。
  • 追加值:numpy.append(arr, values, axis)
  • 插入值:numpy.insert(arr, idx, values, axis)
  • 删除值:numpy.delete(arr, values, axis)
  • 去重数组:numpy.unique(arr, return_index, return_inverse, return_counts)
  • 字符串函数:numpy.char类
  • 三角函数:numpy.sin(arr),numpy.cos(arr),numpy.tan(arr)
  • 四舍五入:numpy.around(arr,decimals)
  • 向下取整:numpy.floor(arr)
  • 向上取整:numpy.ceil(arr)
  • 取倒数:numpy.reciprocal(arr),注意对于大于1的整数返回值为0
  • 幂运算:numpy.power(arr,pow),pow可以是一个数,也可以是和arr对应的数组
  • 取余:numpy.mod(a,b),b可以是一个数,也可以是和a对应是数组
  • 最小值:numpy.amin(arr,axis)
  • 最大值:numpy.amax(arr,axis)
  • 数值跨度:numpy.ptp(arr,axis)
  • 算术平均值:numpy.mean(arr,axis)
  • 标准差:numpy.std(arr)
  • 方差:numpy.var(arr)
  • 副本的改变会影响原数组(赋值),视图的改变不会影响原数组(ndarray.view(),切片,ndarray.copy())
  • 线性代数:numpy.linalg模块

四:Matplotlib

官方教程

官方教程中文翻译

matplotlib入门教程

Jupyter Notebook Viewer的matplotlib lecture 

建议先看官方教程,通过折线图熟悉基本操作,然后看入门教程第三章到第六章掌握各种图的画法

 

  • 一般使用如下语句导入:import matplotlib.pyplot as plt
  • 绘图:plt.plot(x,y),可选color,marker,label等参数,默认的x坐标为从0开始且与y长度相同的数组,x坐标与y坐标一般使用numpy数组,也可以用列表
  • 设置线条:plt.setp()
  • 轴名称:plt.xlable(\'str\'),plt.ylable(\'str)
  • 添加文本:plt.txt(xpos,ypos,\'str\')
  • 添加格子:plt.grid(True)
  • 展示图片:plt.show()
  • 图题:plt.title(\'str\')
  • 图示:plt.legend(),结合plot()中的label参数使用
  • 获取子图:plt.sublot(nrows,ncols,index)或plt.subplot2grid((nrows,ncols),(rows,cols)),可选colspan和rowspan属性
  • 创建画布:plt.figure()
  • 数学表达式:TeX表达式
  • 非线性轴:plt.xscale(\'scale\'),plt.yscale(\'scale\'),可选参数log,symlog,logit等
  • 填充颜色:plt.fill(x,y)和plt.fill_between(x,y,where=...)
  • 条形图:plt.bar(x,y),注意多个条形图的默认颜色相同,应选择不同的颜色方便区分
  • 直方图:plt.hist(x,bins),直方图是一种显示区段内数据数量的图像,x为数据,bins为数据区段,可选histtype,rwidth等属性
  • 散点图:plt.scatter(x,y),散点图通常用于寻找相关性或分组,可选color,marker,label等属性
  • 堆叠图:plt.stackplot(x,y1,y2,y3...),堆叠图用于显示部分对整体随时间的关系,通过利用plt.plot([],[],color,label)添加与堆叠图中颜色相同的空行,可以使堆叠图的意义更加清晰,可选colors等属性
  • 饼图:plt.pie(slice),饼图用于显示部分对整体的关系,可选labels,colors,explode,autupct等属性

 

五:Pandas

10 Minutes to Pandas

十分钟搞定pandas(上文翻译版)

利用python进行数据分析

上面两个教程用于速成,下面这本书是pandas的作者写的,用于仔细了解

 

  • 一般使用如下语句导入:import pandas as pd
  • Pandas是基于NumPy 的一种工具,提供了一套名为DataFrame的数据结构,比较契合统计分析中的表结构,可用Numpy或其它方式进行计算
  • 创建Series:pd.Series=(data,index),Series是一维数组
  • 创建DataFrame:pd.DataFrame(data,index,colums),也可以传递一个字典结构来填充data和colums,DataFrame类似于二维表格,简称df
  • 查看df头尾行:df.head(i),df.tail(i),如不填参数则分别返回除了前五行/倒数前五行的内容
  • 查看索引/列/数据:df.index,df.colums,df.values
  • 快速统计汇总:df.descrbe()
  • 数据转置:df.T
  • 按轴排序:df.sort_index(axis=0,ascending=True)
  • 按值排序:df.sort_values(colums,axis=0,ascending=Ture)
  • 获取:df[\'columnname\']或df.columnname,会返回某列
  • 通过条件选取某列:df = df[df(\'columns\') == \'a\']
  • 对行切片:df[start:stop:step],利用df[n:n+1]即可获取某行
  • 通过标签选择某行:df.loc[index,columname]
  • 通过位置选择某行:df.iloc[indexpos,columnpos],df.iloc[i,:]可获取一行,df.iloc[:,i]可获取一列
  • 布尔索引:df[bool],可以对单独的列进行判定,也可以对整个DataFrame进行判定
  • 在pandas中使用np.nan代替缺失值,这些值不会被包含在计算中
  • 对index和columns进行增删改:df.reindex(index,columns)
  • 去掉含有缺失值的行:df.dropna(how=\'any\'),可以选择how=\'all\'只去掉所有值均缺失的行
  • 补充缺失值:df.fillna(value)
  • 数据应用:df.apply(func),可以是现有函数也可以是lambda函数
  • 连接:pd.contact(obj),obj可以是Series,DataFrame,Panel
  • 合并:pd.merge(left,right)
  • 追加:df.append(data)
  • 分组:df.groupby(columnname).func(),通常为分组/执行函数/组合结果
  • 时间:pandas有着重采样等丰富的时间操作
  • 写入CSV文件:df.to_csv(filename)
  • 读取CSV文件:df.read_csv(filename),结果为DataFrame

六:Scikit-learn

python机器学习实践与kaggle实战

Sklearn快速入门

官方文档

官方文档中文翻译

 

  • sklearn 把所有机器学习的模式整合统一起来了,学会了一个模式就可以通吃其他不同类型的学习模式
  • 步骤一般分为导入模块-创建数据-建立模型-训练-预测

特征工程:

在机器学习中,很重要的一步是对特征的处理,我们参考下文,先给出一些常用的特征处理方法在sklearn中的用法

使用sklearn做单机特征工程

 

  • 标准化(需要使用距离来度量相似性或用PCA降维时):
    from sklearn.preprocessing import StandardScaler
    data_train = StandardScaler().fit_transform(data_train)
    data_test = StandardScaler().fit_transform(data_test)
  • 区间缩放:
    from sklearn.preprocessing import MinMaxScaler
    data = MinMaxScaler().fit_transform(data)
  • 归一化(利于计算梯度下降,消除量纲):
    from sklearn.preprocessing import Normalizer
    data = Normalizer().fit_transform(data)
  • 定量特征二值化(大于epsilon为1,小于等于epsilon为0):
    from sklearn.preprocessing import Binarizer
    data = Binarizer(threshold = epsilon).fit_transform(data)
  • 类别型特征转换为数值型特征:

实际上就是保留数值型特征,并将不同的类别转换为哑变量(独热编码),可参考:python中DictVectorizer的使用

from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer(sparse = False)
X_train = vec.fit_transform(X_train.to_dict(orient = \'recoed\'))
  • 卡方检验:
    from sklearn.feature_selection import SelectKBest
    from sklearn.feature_selection import chi2
    #选择K个最好的特征,返回选择特征后的数据
    skb = SelectKBest(chi2, k = 10).fit(X_train, y_train)
    X_train = skb.transform(X_train)
    X_test = skb.transform(X_test)

     

  • 互信息法:
    from sklearn.feature_selection import SelectKBest
    from minepy import MINE
    
    #由于MINE的设计不是函数式的,定义mic方法将其为函数式的,返回一个二元组,二元组的第2项设置成固定的P值0.5
    def mic(x, y):
        m = MINE()
        m.compute_score(x, y)
        return (m.mic(), 0.5)
    
    #选择K个最好的特征,返回特征选择后的数据
    SelectKBest(lambda X, Y: array(map(lambda x:mic(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)
  • 主成分分析(PCA):
    from sklearn.decomposition import PCA
    estimator = PCA(n_components=2)#几个主成分
    X_pca = estimator.fit_transform(X_data)

     

学习算法:

划分训练集和测试集:

from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 33)

训练:

from sklearn import LearnAlgorithm#导入对应的学习算法包
la = LearnAlgorithm()
la.fit(X_train, y_train)
y_predict = la.predict(x_test)

随机梯度下降法(SGD):

from sklearn.linear_model import SGDClassifier
sgd = SGDClassifier()
from sklearn.linear_model import SGDRegressor
sgd = SGDRegressor(loss=\'squared_loss\', penalty=None, random_state=42)

支持向量机(SVM):

支持向量分类(SVC):

from sklearn.svm import SVC
svc_linear = SVC(kernel=\'linear\')#线性核,可以选用不同的核

支持向量回归(SVR):

from sklearn.svm import SVR
svr_linear = SVR(kernel=\'linear\')#线性核,可以选用不同的核如poly,rbf

朴素贝叶斯(NaiveBayes):

from sklearn.naive_bayes import MultinomialNB
mnb = MultinomialNB()

决策树(DecisionTreeClassifier):

from sklearn.tree import DecisionTreeClassifier
dtc = DecisionTreeClassifier(criterion=\'entropy\', max_depth=3, min_samples_leaf=5)#最大深度和最小样本数,用于防止过拟合

随机森林(RandomForestClassifier):

from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier(max_depth=3, min_samples_leaf=5)

梯度提升树(GBDT):

from sklearn.ensemble import GradientBoostingClassifier
gbc = GradientBoostingClassifier(max_depth=3, min_samples_leaf=5)

极限回归森林(ExtraTreesRegressor):

from sklearn.ensemble import ExtraTreesRegressor()
etr = ExtraTreesRegressor()

评估:

from sklearn import metrics
accuracy_rate = metrics.accuracy_score(y_test, y_predict)
metrics.classification_report(y_test, y_predict, target_names = data.target_names)#可以获取准确率,召回率等数据

K折交叉检验:

from sklearn.cross_validation import cross_val_score,KFold
cv = KFold(len(y), K, shuffle=True, random_state = 0)
scores = cross_val_score(clf, X, y, cv = cv)

from sklearn.cross_validation import cross_val_score
scores = cross_val_score(dt, X_train, y_train, cv = K)

注意这里的X,y需要为ndarray类型,如果是DataFrame则需要用df.values和df.values.flatten()转化

Pipeline机制:

pipeline机制实现了对全部步骤的流式化封装和管理,应用于参数集在数据集上的重复使用.Pipeline对象接受二元tuple构成的list,第一个元素为自定义名称,第二个元素为sklearn中的transformer或estimator,即处理特征和用于学习的方法.以朴素贝叶斯为例,根据处理特征的不同方法有以下代码:

clf_1 = Pipeline([(\'count_vec\', CountVectorizer()), (\'mnb\', MultinomialNB())])
clf_2 = Pipeline([(\'hash_vec\', HashingVectorizer(non_negative=True)), (\'mnb\', MultinomialNB())])
clf_3 = Pipeline([(\'tfidf_vec\', TfidfVectorizer()), (\'mnb\', MultinomialNB())])

特征选择:

from sklearn import feature_selection
fs =  feature_selection.SelectPercentile(feature_selection.chi2, percentile=per)
X_train_fs = fs.fit_transform(X_train, y_train)

我们以特征选择和5折交叉检验为例,实现一个完整的参数选择过程:

from sklearn import feature_selection
from sklearn.cross_validation import cross_val_score
percentiles = range(1,100)
results= []
for i in percentiles:
    fs =  feature_selection.SelectPercentile(feature_selection.chi2, percentile=i)
    X_train_fs = fs.fit_transform(X_train, y_train)
    scores = cross_val_score(dt, X_train_fs, y_train, cv = 5)
    results = np.append(results, scores.mean())

opt = np.where(results == results.max())[0]
fs = feature_selection.SelectPercentile(feature_selection.chi2, percentile=opt)
X_train_fs = fs.fit_transform(X_train, y_train)
dt.fit(X_train_fs, y_train)
y_predict = dt.predict(x_test)

超参数:

超参数指机器学习模型里的框架参数,在竞赛和工程中都非常重要

集成学习(Ensemble Learning):

通过对多个模型融合以提升整体性能,如随机森林,XGBoost,参考下文:

Ensemble Learning-模型融合-Python实现

多线程网格搜索:

用于寻找最优参数,可参考下文:

Sklearn-GridSearchCV网格搜索

from sklearn.cross_validation import train_test_split
from sklearn.grid_search import GridSearchCV
X_train, X_test, y_train, y_test = train_test_split(news.data[:3000], news.target[:3000], test_size=0.25, random_state=33)

from sklearn.svm import SVC
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.pipeline import Pipeline

clf = Pipeline([(\'vect\', TfidfVectorizer(stop_words=\'english\', analyzer=\'word\')), (\'svc\', SVC())])

parameters = \'svc__gamma\': np.logspace(-2, 1, 4), \'svc__C\': np.logspace(-1, 1, 3)

gs = GridSearchCV(clf, parameters, verbose=2, refit=True, cv=3, n_jobs=-1)

%time _=gs.fit(X_train, y_train)
gs.best_params_, gs.best_score_
print gs.score(X_test, y_test)

 

七:Kaggle

学习完以上内容后,可以参考下文,已经可以完成一些较为简单的kaggle contest了

机器学习系列(3)_逻辑回归应用之Kaggle泰坦尼克之灾

 

kaggle之路,与强者为伍——记santander交易预测(代码片段)

Kaggle——SantanderCustomerTransactionPrediction原题链接题目Description预测一个乘客在未来会不会交易,不计交易次数,只要有交易即为1,否则为0.Identifywhichcustomerswillmakeaspecifictransactioninthefuture,irrespectiveoftheamountofmoneytransacted.Youareprovidedwi... 查看详情

python数据挖掘最佳入门案列,来自kaggle分享(代码片段)

查看详情

kaggle入门项目:titanic存亡预测数据处理(代码片段)

原kaggle比赛地址:https://www.kaggle.com/c/titanic原kernel地址:ADataScienceFramework:ToAchieve99%Accuracy问题处理之前要知道的事:数据科学框架(ADataScienceFramework)1.定义问题(DefinetheProblem):问题→需求→方法→设计→技术,这是刚开始拿... 查看详情

kaggle入门项目:titanic存亡预测验证与实现(代码片段)

原kaggle比赛地址:https://www.kaggle.com/c/titanic原kernel地址:ADataScienceFramework:ToAchieve99%Accuracy首先我们绘制出皮尔森系相关度的热力图,关于皮尔森系数可以翻阅资料,是一个很简洁的判断相关度的公式。终于要进行最终的模型拟合... 查看详情

kaggle新手入门必看,手把手教学(代码片段)

AddData的路径:/kaggle/inputgitclone的路径:/kaggle/working一、Kaggle账号注册1.进入官网Kaggle点击Register进行账号注册2.随便点一个方式注册,本人用的邮箱3.点进去填写对应信息进行注册,点击next即可二、Kaggle创建项目1.... 查看详情

fashion_mnist--kaggle入门篇(代码片段)

...据专业kaggle竞赛为例,入门讲解一篇竞赛的全流程与代码简介。https://www.kaggle.com/competitions/classifying-the-fashion-mnist/submit本文所用深度学习框架为:paddle飞浆,安装参考官网https://www.paddlepaddle.org.cn/condainstallpaddlepaddle-gpu... 查看详情

ylearn因果推断入门实践——kaggle银行客户流失(代码片段)

YLearn的因果学习开源项目,它提供了一站式处理因果学习完整流程的开源算法工具包,解决了因果学习中的因果发现、因果量识别、因果效应估计、反事实推断和策略学习等五大关键问题,可以有效帮助客户进一步提... 查看详情

pytorch入门练习-kaggle手写字识别神经网络(snn)实现(代码片段)

采用pytorch搭建神经网络,解决kaggle平台手写字识别问题。数据来源:https://www.kaggle.com/competitions/digit-recognizer/data参考pytorch官网:https://pytorch.org/tutorials/beginner/basics/data_tutorial.html数据预处理#ThisPython3environmentcomeswithmany... 查看详情

大数据进阶之路——scala入门(代码片段)

文章目录概述安装JavaVSScalaval和var基本数据类型lazy在Scala中的应用开发工具IDEAMaven概述https://www.scala-lang.org/Scalacombinesobject-orientedandfunctionalprogramminginoneconcise,high-levellanguage.Scala’sstatictypeshelpavoidb 查看详情

python之路(18)django框架入门(代码片段)

前言  Django框架下的views,templates views视图函数的属性方法http下有两个核心类:HttpResquest类和HttpResponse类requesrrequest.path:当前url访问的路径request.get_full_path():url带参数的全路径request.method:返回请求的方式,即GET或POSTrequest.PO... 查看详情

kaggle实战入门:泰坦尼克号生还预测(进阶版)(代码片段)

Kaggle实战入门:泰坦尼克号生还预测1.加载数据2.特征工程3.模型训练4.模型部署Kaggle实战入门:泰坦尼克号生还预测(基础版)对机器学习的全流程进行了总体介绍。本文继续以泰坦尼克号生还预测为例,对机... 查看详情

scala成长之路函数入门(代码片段)

众所周知,scala作为一门极客型的函数式编程语言,支持的特性包括:函数拥有“一等公民”身份;支持匿名函数(函数字面量) 支持高阶函数 支持闭包 部分应用函数 柯里化首先需要指出,在scala中有方法和函数对... 查看详情

kaggle竞赛丨入门手写数字识别之knncnn降维(代码片段)

引言这段时间来,看了西瓜书、蓝皮书,各种机器学习算法都有所了解,但在实践方面却缺乏相应的锻炼。于是我决定通过Kaggle这个平台来提升一下自己的应用能力,培养自己的数据分析能力。我个人的计划是先从简单的数据集... 查看详情

googletest之路2-googletest入门(primer)(代码片段)

Whygoogletest?为啥要用GoogleTest呢?googletest是由测试技术Team开发的带有google特殊的需求和限制的测试框架。不管你在什么平台上写C++代码,googleTest可以帮助你实现任何类型的测试,不仅仅是单元测试那么是什么成就了一个好的测试... 查看详情

程序员入门--两年养成之路(代码片段)

备注:此文最早发表于公司内网,经脱敏处理后,部分内容可能读起来逻辑不太顺,或者残缺部分内容  毕业进厂两年了,在鹅厂两年来的工作中,对编程和工程有了初步的理解和实践,因此决定写下来和大家一起交流,同时... 查看详情

koa2从入门到进阶之路(代码片段)

之前的文章我们介绍了一下koapost提交数据及koa-bodyparser中间件,本篇文章我们来看一下 koa-static静态资源中间件。 我们在之前的目录想引入外部的js,css,img等静态资源该如何获取呢?我们首先先按照之前的思维按照相对... 查看详情

koa2从入门到进阶之路(代码片段)

首先我们先来了解一下Koa是什么,https://koa.bootcss.com/,这是Koa的官方网站,映入眼帘的第一句就是 Koa--基于Node.js平台的下一代web开发框架。在学习Koa之前我们应对Node.js有一定的基础,我们都知道:Node.js是一个异步的世界,... 查看详情

typescript入门学习之路(代码片段)

TypeScript学习之路TypeScript学习之路安装typescript环境typescript起步typescript开发工具vscode自动编译.ts文件typescript中的数据类型typescript中的函数typescript中类的定义继承javascript中的继承typescript中的继承typescript类的静态属性和静态方法t... 查看详情