精华内容
下载资源
问答
  • 最常见的方法就是K折交叉检验。 写一个住房数据案例 # 先把数据分成k个部分,把其中一个部分用作测试集,把其余部分用作训练集以拟合模型 # 模型拟合好之后,使用测试集进行 测试,并计算误差。不断重复这个过程,...

    在样本数量不是很多的情况下,想要检验拟合一个完美的模型。最常见的方法就是K折交叉检验。

    写一个住房数据案例

    # 先把数据分成k个部分,把其中一个部分用作测试集,把其余部分用作训练集以拟合模型
    # 模型拟合好之后,使用测试集进行 测试,并计算误差。不断重复这个过程,知道k个部分都测试过。
    # 模型的最终误差是所有模型的平均值
    
    import pandas as pd
    housing=pd.read_csv('housing_renamed.csv')
    from sklearn.model_selection import train_test _split
    from sklearn.linear_model import LinearRegression
    print(housing.columns)
    

    以上工作就是 读取文件,调用我们需要的模块。
    第一个模块是分训练样本和测试样本的模块,从sklearn.model_selection中调用,即train_test_split。

    其次是 拟合回归线的 sklearn.linear_model 中调用LinearRegression。

    由于sklearn高度依赖Numpy ndarray,所以patsy库允许指定一个公式,比如statsmodels中的公式API,并且会返回合适的Numpy数组,以便在sklearn中使用。
    这里我们再从patsy中调用一个dmatrices。

    from patsy import dmatrices
    # 获取训练数据和测试数据
    y,X=dmatrices('value_per_sq_ft~units+sq_ft+boro',housing,return_type='dataframe')
    # 给y和x指定变量,最后参数指定返回一个DataFrame数据集
    X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.20,random_state=42)
    # 数据分成四份分X测试、X训练,y测试,y训练。
    
    lr=LinearRegression().fit(X_train,y_train)
    # 对x训练样本和y训练样本fit一个回归线
    print(lr.score(X_test,y_test))
    # 并且用.score()函数 以及x和y的测试样本 ,算出一个分数,衡量模型在测试数据上的表现
    

    准备工作做好后,就可以开始执行k折交叉验证了,先从sklearn库导入该函数

    from sklearn.model_selection import KFold,cross_val_score
    # 重新获取住房数据
    housing=pd.read_csv('housing_renamed.csv')
    # 再指定要折几下
    # 一般折的越多,计算起来越慢,这里就按照5来处理吧
    kf=KFold(n_splits=5)
    # 直接给n_splits赋值就行
    

    然后在每一折上训练并测试模型

    coefs=[]
    scores=[]
    for train,test in kf.split(X):
        # 遍历样本
        X_train,X_test=X[train],X[test]
        y_train,y_test=y[train],y[test]
        # 存放列表赋值
        lr=LinearRegression().fit(X_train,y_train)
        # 拟合模型
        coefs.append(pd.DataFrame(lr.coef_))
        scores.append(lr.score(X_test,y_test))
    

    查看代码

    coefs_df=pd.concat(coefs)
    coefs_df.columns=X.design_info.column_names
    print(coefs_df)
    

    可以使用apply和 np.mean 来查看所有折的平均系数

    import numpy as np
    print(coefs_df.apply(np.mean())
    

    还可以查看分数

    print(scores)
    
    # 还可以使用cross_val_scores(交叉验证分数)计算分数
    # 使用cross_val_scores计算cv分数
    model=LinearRegression()
    scores=cross_val_score(model,X,y,cv=5)
    print(scores)
    # 如果要比较多个模型,可以比较平均分数
    print(scores.mean())
    

    比较多个模型:
    除了变量之间是+的形式,还有* 的形式,试试别的模型,再得出各个模型的分数,看看哪个更好

    # 用k折交叉验证重新拟合模型
    # 创建预测变量矩阵和响应矩阵
    y1,X1=dmatrices('value_per_sq_ft~units+sq_ft+boro',housing)
    y2,X2=dmatrices('value_per_sq_ft~units*sq_ft+boro',housing)
    y3,X3=dmatrices('value_per_sq_ft~units+sq_ft*boro+type',housing)
    y4,X4=dmatrices('value_per_sq_ft~units+sq_ft*boro+sq_ft*type',housing)
    y5,X5=dmatrices('value_per_sq_ft~boro+type',housing)
    
    # 拟合模型
    model=LinearRegression()
    scores1=cross_val_score(model,X1,y1,cv=5)
    scores2=cross_val_score(model,X2,y2,cv=5)
    scores3=cross_val_score(model,X3,y3,cv=5)
    scores4=cross_val_score(model,X4,y4,cv=5)
    scores5=cross_val_score(model,X5,y5,cv=5)
    
    # 最后查看交叉验证分数
    scores_df=pd.DataFrame([scores1,scores2,scores3,scores4,scores5])
    print(scores_df.apply(np.mean,axis=1))
    
    展开全文
  • 在机器学习的建模工作中,首先会将数据集分为训练集和测试集,在训练集上对模型...而交叉验证中常用的方法K折交叉检验法(k-fold cross validation)用于模型调优,可以缓解过拟合现象的产生,具体实现方法: 将样本

    在机器学习的建模工作中,首先会将数据集分为训练集和测试集,在训练集上对模型进行训练以及参数的调优,在测试集上对模型进行评估,但是测试集的选择会对模型的效果产生影响,在随机切分训练集/测试集的情况下,可能刚好选择了比较容易预测的数据点作为测试集,所以采用交叉验证(cross validation)的方式,通过获取模型在多个测试集上的平均效果来总体评估模型的效果。

    而交叉验证中常用的方法K折交叉检验法(k-fold cross validation)用于模型调优,可以缓解过拟合现象的产生,具体实现方法:

    将样本数据集分为k组大小相似的互斥子集,每次抽取出k份中的一份作为测试集,剩下来的k-1份作为训练集,尽量保证每个子集数据分布的一致性。依次得到测试结果S1,S2,…,Sk,然后求其平均值得到模型在多个测试集上的平均效果,用求得的平均值评估模型的总体效果。

    在这里插入图片描述
    (图中红色的部分为每次从样本数据集中抽取出来作为测试集的部分。)

    import numpy as np
    import pandas as pd
    
    # 导入实现K折交叉检验的模块
    from sklearn.model_selection import KFold
    
    df1 = pd.read_csv("kobe_train.csv")
    df1.head()
    

    在这里插入图片描述
    第一步是导入模块和加载数据。

    # 测试集和训练集的拆分
    # 将输入模型的特征x和目标属性Y切分出来
    X = df1.iloc[:,2:4] 
    Y = df1.iloc[:,5]
    
    
    #数据分为 训练集 和 测试集
    kf = KFold(n_splits = 10)
    for train,valid in kf.split(X):
        print("train:%s,valid:%s"%(train,valid))
    

    在这里插入图片描述
    这里K = 10,由此获取到了10组训练集+测试集,大大缓解了过拟合现象的产生。

    展开全文
  • 什么是卡方检验卡方检验是一种用途很广的基于卡方分布的假设检验方法,其根本思想就是在于比较理论频数和实际频数的吻合程度或拟合优度问题。其主要应用于分类变量,根据样本数据推断总体分布与期望分布是否有显著...

    什么是卡方检验

    卡方检验是一种用途很广的基于卡方分布的假设检验方法,其根本思想就是在于比较理论频数和实际频数的吻合程度或拟合优度问题。其主要应用于分类变量,根据样本数据推断总体分布与期望分布是否有显著差异或推断两个分类变量是否相关或相互独立。

    卡方检验分类

    卡方检验步骤

    卡方检验可以参照一般假设检验步骤:设置原假设与备择假设

    设置显著性水平

    根据问题选择具体的假设检验方式

    计算统计量,并通过统计量获取P值

    根据P值与显著性水平,决定接受原假设还是备择假设

    一般可以设原假设为:观察频数与期望频数没有差异,或者两个变量相互独立不相关。

    卡方检验的计算公式为:

    从公式也可以看出它是利用类别变量的观测值频数与期望值频数进行构建的。

    卡方检验的应用实例应用实例--拟合优度检验

    以掷骰子为例,有一天小王同学闲来无事,发现桌上刚好有一枚骰子,身为数据分析师的他,好奇骰子是不是均匀的,于是他连着投掷了120次,并统计了各点出现的次数。由于原假设骰子是均衡的,所以每点数期望值都为20。

    第一步我们确定原假设即骰子是均衡的,第二步设置显著性水平α=0.05,在确立使用卡方检验之后

    确定上述统计值之后,并结合卡方表就可对其进行判断。

    接下来用python实现

    import pandas as pd

    import numpy as np

    from scipy import stats

    #创建上述表

    observed_pd = pd.DataFrame(['1点']*23+['2点']*20+['3点']*18+['4点']*19+['5点']*24+['6点']*16)

    expected_pd = pd.DataFrame(['1点']*20+['2点']*20+['3点']*20+['4点']*20+['5点']*20+['6点']*20)

    observed_table = pd.crosstab(index=observed_pd[0],columns='count')

    expected_table = pd.crosstab(index=expected_pd[0],columns='count')

    print(observed_table)

    print('——————')

    print(expected_table)

    #通过公式算出卡方值

    observed = observed_table

    expected = expected_table

    chi_squared_stat = ((observed-expected)**2/expected).sum()

    print('chi_squared_stat')

    print(chi_squared_stat)

    有两种实现方式

    #方法一

    crit = stats.chi2.ppf(q=0.95,df=5) #95置信水平 df = 自由度

    print(crit) #临界值,拒绝域的边界 当卡方值大于临界值,则原假设不成立,备择假设成立

    P_value = 1-stats.chi2.cdf(x=chi_squared_stat,df=5)

    print('P_value')

    print(P_value)

    # 方法二

    stats.chisquare(f_obs=observed, #Array of obversed counts

    f_exp=expected) #Array of expected counts

    可以看出P值要远大于显著性水平α,所以我们没有理由拒绝原假设,即骰子是均匀的。

    2.应用实例--交叉表卡方

    在日常的数据分析工作中,卡方检验主要用于留存率,渗透率等漏斗指标,下面我们就以留存率为例,假设平台从微博、微信、知乎渠道引流,现在我们要确定留存率是否与渠道有关。(示例数据皆为虚构)

    第一步我们先设立原假设:留存率与渠道无关;第二步设置显著性水平α=0.05,在确立使用卡方检验之后接下来用python实现

    df = pd.DataFrame(columns = ['register','stay'],index = ['weibo','zhihu','weixin'],

    data=[[11570,3173],[15113,3901],[18244,4899]])

    df['lost'] = df['register']- df['stay']

    df

    observed = df[['stay','lost']]

    stats.chi2_contingency(observed=observed)

    可以看出P值要小于我们原先定的显著性水平α,所以我们有理由拒绝原假设,即用户渠道的确影响了留存情况,两者并不是相互独立的。

    展开全文
  • 交叉验证 python

    千次阅读 2018-05-22 16:51:21
    以下简称交叉验证(Cross Validation)为CV.CV是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set),首先...

    以下简称交叉验证(Cross Validation)为CV.CV是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set),首先用训练集对分类器进行训练,在利用验证集来测试训练得到的模型(model),以此来做为评价分类器的性能指标.常见CV的方法如下:
    K次交叉检验(K-Fold Cross Validation):
    K次交叉检验的大致思想是将数据大致分为K个子样本,每次取一个样本作为验证数据,取余下的K-1个样本作为训练数据

    from sklearn.model_selection import KFold
    import numpy as np
    X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
    y = np.array([1, 2, 3, 4])
    kf = KFold(n_splits=2)
    
    for train_index, test_index in kf.split(X):
        print("TRAIN:", train_index, "TEST:", test_index)
        X_train, X_test = X[train_index], X[test_index]
        y_train, y_test = y[train_index], y[test_index]

    Stratified k-fold:
    StratifiedKFold()这个函数较常用,比KFold的优势在于将k折数据按照百分比划分数据集,每个类别百分比在训练集和测试集中都是一样,这样能保证不会有某个类别的数据在训练集中而测试集中没有这种情况,同样不会在训练集中没有全在测试集中,这样会导致结果糟糕透顶。

    from sklearn.model_selection import StratifiedKFold
    import numpy as np
    
    X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
    y = np.array([0, 0, 1, 1])
    skf = StratifiedKFold(n_splits=2)
    for train_index, test_index in skf.split(X, y):
        print("TRAIN:", train_index, "TEST:", test_index)
        X_train, X_test = X[train_index], X[test_index]
        y_train, y_test = y[train_index], y[test_index]

    train_test_split:(这个目前用的比较多)

    随机根据比例分配训练集和测试集。这个函数可以调整随机种子。

    import numpy as np
    from sklearn.model_selection import train_test_split
    X, y = np.arange(10).reshape((5, 2)), range(5)
    
    X_train, X_test, y_train, y_test = train_test_split(
        X, y, test_size=0.33, random_state=42)

    参考:https://blog.csdn.net/ztchun/article/details/71169530

    展开全文
  • 交叉验证python_交叉验证

    千次阅读 2020-08-08 22:03:11
    交叉验证pythonCross validation may be any of various model validation techniques that are used to assess how well a predictive model will generalize to an independent set of data that the model has ...
  • 于是使用交叉检验,每个分类样例都会出现在测试集和训练集。 交叉检验的是评估给定算法在特定数据集上训练后的泛化性能好坏的统计学方法。不会返回一个模型,不是一种构建可应用于新数据的模型的方法。 标准k折交叉...
  • K折交叉验证python实现

    2019-12-10 21:59:58
    用KNN算法训练iris数据,并使用K折交叉验证方法找出最优的K值 import numpy as np from sklearn import datasets from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import KFold #...
  • 机器学习-CrossValidation交叉验证Python实现

    万次阅读 多人点赞 2015-07-28 19:34:40
    1.原理1.1 概念交叉验证(Cross-validation)主要用于模型训练或建模应用中,如分类预测、PCR、PLS回归建模等。在给定的样本空间中,拿出大部分样本作为训练集来训练模型,剩余的小部分样本使用刚建立的模型进行预测,...
  • 本文需要用到的Python库:PandasScipy.statsStatsmodels在《用Python统计推断——交叉表篇(上:crosstab与热图)》中,我们介绍了如何构建交叉表并对其可视化。本文,我们将介绍如何检验交叉表的两个分类变量,是...
  • 交叉检验能解决一次性测试所带来的问题。既然只切一次有问题,那就多切几次,多进行几次实验。每次切分时,都要保证这次得到的训练集合测试集与上次不一样,还要确保每条数据都只能用来测试一次。算法描述如下: ...
  • 我要做交叉验证,需要每个训练集和测试集都保持相同的样本分布比例,直接用sklearn提供的KFold并不能满足这个需求。2.将生成的交叉验证数据集保存成CSV文件,而不是直接用sklearn训练分类模型。3.在编码过程中有一的...
  • 这是卡方检验独立性有用的地方。Chi-Square检验我们将在1994年查看人口普查数据。具体来说,我们对“性别和“每周工作时间”之间的关系感兴趣。在我们的案例中,每个人只能有一个“性别”,且只有一个工作时间类别。...
  • Python交叉分析学习笔记 本文将介绍两种方法来进行交叉分析:1.T检验 2.数据透视表,数据源:百度网盘,课程来源:慕课网 方法1:独立T检验 任意取两个属性,根据独立T检验结果,判断两者之间的关系 1.导入数据 df=...
  • Python 卡方检验

    万次阅读 2018-01-14 08:57:11
    卡方检验是一种用途很广的计数资料的假设检验方法。它属于非参数检验的范畴,...不讲过多理论,主要使用 python 实现卡方验证。之前对于元素/特征/属性 异常值的选择情况,可以使用直方图、箱型图、Z分数法等筛选。如 
  • python中sklearn实现交叉验证

    万次阅读 2017-05-04 14:24:54
    1、概述在实验数据分析中,有些算法需要用现有的数据...测试数据不能用于构建模型中,只能用于最后检验模型的准确性。有时候模型的构建的过程中,也需要检验模型,辅助模型构建。所以会将训练数据分为两个部分,1)训
  • Python实现 交叉验证

    万次阅读 2019-07-11 17:37:29
    交叉验证 trainingSet :储存训练集索引 index :数据集总数 all_data:储存测试集索引 trainingSet = list(range(all_data)) #创建存储训练集的索引值的列表 testSet = [] #储存测试集的索引值的列表 ...
  • 交叉验证(python

    2020-04-30 10:28:57
    思路 将训练/测试数据集划分N个互斥子集,每次用其中一个子集当作验证集,剩下的N-1个作为训练集,进行N次训练和测试,得到N个结果。 代码 参数说明: n_splits:表示划分几等份 shuffle:在每次划分时,是否进行洗...
  • 广告关闭腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买... 在本教程中,你将学习python中的白噪声时间序列。 完成本教程后,你将知道:白噪声时间序列的定义以及为什么它很重要。 如何检查是...
  • python 交叉分析 笔记

    2019-04-29 22:22:52
    import pandas as pd import numpy as np import scipy.stats as ss import matplotlib.pyplot as plt ...#交叉分析 df = pd.read_csv('HR_comma_sep.csv') dp_indices = df.groupby(by="sales").in...
  • 引言目前,遥感图像在模式识别、图像分割、地面参数反演研究中有着广泛的应用。遥感图像一般具有多个波段,每个波段均反映了地物的不同波谱特性。...本文所使用的特征筛选方法是卡方检验特征筛选,该...
  • 如果目的是为了建模预测,用python的sklearn(集成了很多机器学习算法和模型检验函数),工具只是手段,我们对结果负责就好。帖子目录(也是回归分析步骤):1、作图,观察变量分布,均值和中位数等统计学指标,宏观...
  • K折交叉验证原理及其python实现

    千次阅读 2019-07-17 15:15:54
    K折交叉验证用于模型调优,所有的数据都被用来训练,会导致过拟合,K折交叉验证可以缓解过拟合。 将数据分为k组,每次从训练集中,抽取出k份中的一份数据作为验证集,剩余数据作为测试集。测试结果采用k组数据的...
  • 交叉验证(CrossValidation)是常用的机器学习训练手段,可以有效检验一个模型的泛化能力。交叉验证需要将原始数据集平等地划分为若干份,例如常用的10折交叉验证,10-folds CV 指的是将数据集分为10份,然后进行10...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,103
精华内容 2,441
关键字:

交叉检验python

python 订阅