当前位置: 首页 > news >正文

微信公众号做微网站吗十大免费分销系统

微信公众号做微网站吗,十大免费分销系统,玛酷机器人少儿编程加盟,学习php网站建设以下内容参考自https://github.com/iamseancheney/python_for_data_analysis_2nd_chinese_version/blob/master/%E7%AC%AC05%E7%AB%A0%20pandas%E5%85%A5%E9%97%A8.md 《利用Python进行数据分析第2版》 用以学习和记录。 本书中#xff0c;我已经介绍了Python数据分析的编程基…以下内容参考自https://github.com/iamseancheney/python_for_data_analysis_2nd_chinese_version/blob/master/%E7%AC%AC05%E7%AB%A0%20pandas%E5%85%A5%E9%97%A8.md 《利用Python进行数据分析·第2版》 用以学习和记录。 本书中我已经介绍了Python数据分析的编程基础。因为数据分析师和科学家总是在数据规整和准备上花费大量时间这本书的重点在于掌握这些功能。 开发模型选用什么库取决于应用本身。许多统计问题可以用简单方法解决比如普通的最小二乘回归其它问题可能需要复杂的机器学习方法。幸运的是Python已经成为了运用这些分析方法的语言之一因此读完此书你可以探索许多工具。 本章中我会回顾一些pandas的特点在你胶着于pandas数据规整和模型拟合和评分时它们可能派上用场。然后我会简短介绍两个流行的建模工具statsmodels和scikit-learn。这二者每个都值得再写一本书我就不做全面的介绍而是建议你学习两个项目的线上文档和其它基于Python的数据科学、统计和机器学习的书籍。 pandas与模型代码的接口 模型开发的通常工作流是使用pandas进行数据加载和清洗然后切换到建模库进行建模。开发模型的重要一环是机器学习中的“特征工程”。它可以描述从原始数据集中提取信息的任何数据转换或分析这些数据集可能在建模中有用。本书中学习的数据聚合和GroupBy工具常用于特征工程中。 优秀的特征工程超出了本书的范围我会尽量直白地介绍一些用于数据操作和建模切换的方法。 pandas与其它分析库通常是靠NumPy的数组联系起来的。将DataFrame转换为NumPy数组可以使用.values属性 In [10]: import pandas as pdIn [11]: import numpy as npIn [12]: data pd.DataFrame({....: x0: [1, 2, 3, 4, 5],....: x1: [0.01, -0.01, 0.25, -4.1, 0.],....: y: [-1.5, 0., 3.6, 1.3, -2.]})In [13]: data Out[13]: x0 x1 y 0 1 0.01 -1.5 1 2 -0.01 0.0 2 3 0.25 3.6 3 4 -4.10 1.3 4 5 0.00 -2.0In [14]: data.columns Out[14]: Index([x0, x1, y], dtypeobject)In [15]: data.values Out[15]: array([[ 1. , 0.01, -1.5 ],[ 2. , -0.01, 0. ],[ 3. , 0.25, 3.6 ],[ 4. , -4.1 , 1.3 ],[ 5. , 0. , -2. ]])要转换回DataFrame可以传递一个二维ndarray可带有列名 In [16]: df2 pd.DataFrame(data.values, columns[one, two, three])In [17]: df2 Out[17]: one two three 0 1.0 0.01 -1.5 1 2.0 -0.01 0.0 2 3.0 0.25 3.6 3 4.0 -4.10 1.3 4 5.0 0.00 -2.0笔记最好当数据是均匀的时候使用.values属性。例如全是数值类型。如果数据是不均匀的结果会是Python对象的ndarray In [18]: df3 data.copy()In [19]: df3[strings] [a, b, c, d, e]In [20]: df3 Out[20]: x0 x1 y strings 0 1 0.01 -1.5 a 1 2 -0.01 0.0 b 2 3 0.25 3.6 c 3 4 -4.10 1.3 d 4 5 0.00 -2.0 eIn [21]: df3.values Out[21]: array([[1, 0.01, -1.5, a],[2, -0.01, 0.0, b],[3, 0.25, 3.6, c],[4, -4.1, 1.3, d],[5, 0.0, -2.0, e]], dtypeobject)对于一些模型你可能只想使用列的子集。我建议你使用loc用values作索引 In [22]: model_cols [x0, x1]In [23]: data.loc[:, model_cols].values Out[23]: array([[ 1. , 0.01],[ 2. , -0.01],[ 3. , 0.25],[ 4. , -4.1 ],[ 5. , 0. ]])一些库原生支持pandas会自动完成工作从DataFrame转换到NumPy将模型的参数名添加到输出表的列或Series。其它情况你可以手工进行“元数据管理”。 在第12章我们学习了pandas的Categorical类型和pandas.get_dummies函数。假设数据集中有一个非数值列 In [24]: data[category] pd.Categorical([a, b, a, a, b],....: categories[a, b])In [25]: data Out[25]: x0 x1 y category 0 1 0.01 -1.5 a 1 2 -0.01 0.0 b 2 3 0.25 3.6 a 3 4 -4.10 1.3 a 4 5 0.00 -2.0 b如果我们想替换category列为虚变量我们可以创建虚变量删除category列然后添加到结果 In [26]: dummies pd.get_dummies(data.category, prefixcategory)In [27]: data_with_dummies data.drop(category, axis1).join(dummies)In [28]: data_with_dummies Out[28]: x0 x1 y category_a category_b 0 1 0.01 -1.5 1 0 1 2 -0.01 0.0 0 1 2 3 0.25 3.6 1 0 3 4 -4.10 1.3 1 0 4 5 0.00 -2.0 0 1用虚变量拟合某些统计模型会有一些细微差别。当你不只有数字列时使用Patsy下一节的主题可能更简单更不容易出错。 用Patsy创建模型描述 Patsy是Python的一个库使用简短的字符串“公式语法”描述统计模型尤其是线性模型可能是受到了R和S统计编程语言的公式语法的启发。 Patsy适合描述statsmodels的线性模型因此我会关注于它的主要特点让你尽快掌握。Patsy的公式是一个特殊的字符串语法如下所示 y ~ x0 x1ab不是将a与b相加的意思而是为模型创建的设计矩阵。patsy.dmatrices函数接收一个公式字符串和一个数据集可以是DataFrame或数组的字典为线性模型创建设计矩阵 In [29]: data pd.DataFrame({....: x0: [1, 2, 3, 4, 5],....: x1: [0.01, -0.01, 0.25, -4.1, 0.],....: y: [-1.5, 0., 3.6, 1.3, -2.]})In [30]: data Out[30]: x0 x1 y 0 1 0.01 -1.5 1 2 -0.01 0.0 2 3 0.25 3.6 3 4 -4.10 1.3 4 5 0.00 -2.0In [31]: import patsyIn [32]: y, X patsy.dmatrices(y ~ x0 x1, data)现在有 In [33]: y Out[33]: DesignMatrix with shape (5, 1)y-1.50.03.61.3-2.0Terms:y (column 0)In [34]: X Out[34]: DesignMatrix with shape (5, 3)Intercept x0 x11 1 0.011 2 -0.011 3 0.251 4 -4.101 5 0.00Terms:Intercept (column 0)x0 (column 1)x1 (column 2)这些Patsy的DesignMatrix实例是NumPy的ndarray带有附加元数据 In [35]: np.asarray(y) Out[35]: array([[-1.5],[ 0. ],[ 3.6],[ 1.3],[-2. ]])In [36]: np.asarray(X) Out[36]: array([[ 1. , 1. , 0.01],[ 1. , 2. , -0.01],[ 1. , 3. , 0.25],[ 1. , 4. , -4.1 ],[ 1. , 5. , 0. ]])你可能想Intercept是哪里来的。这是线性模型比如普通最小二乘回归的惯例用法。添加0到模型可以不显示intercept In [37]: patsy.dmatrices(y ~ x0 x1 0, data)[1] Out[37]: DesignMatrix with shape (5, 2)x0 x11 0.012 -0.013 0.254 -4.105 0.00Terms:x0 (column 0)x1 (column 1)Patsy对象可以直接传递到算法比如numpy.linalg.lstsq中它执行普通最小二乘回归 In [38]: coef, resid, _, _ np.linalg.lstsq(X, y)模型的元数据保留在design_info属性中因此你可以重新附加列名到拟合系数以获得一个Series例如 In [39]: coef Out[39]: array([[ 0.3129],[-0.0791],[-0.2655]])In [40]: coef pd.Series(coef.squeeze(), indexX.design_info.column_names)In [41]: coef Out[41]: Intercept 0.312910 x0 -0.079106 x1 -0.265464 dtype: float64用Patsy公式进行数据转换 你可以将Python代码与patsy公式结合。在评估公式时库将尝试查找在封闭作用域内使用的函数 In [42]: y, X patsy.dmatrices(y ~ x0 np.log(np.abs(x1) 1), data)In [43]: X Out[43]: DesignMatrix with shape (5, 3)Intercept x0 np.log(np.abs(x1) 1)1 1 0.009951 2 0.009951 3 0.223141 4 1.629241 5 0.00000Terms:Intercept (column 0)x0 (column 1)np.log(np.abs(x1) 1) (column 2)常见的变量转换包括标准化平均值为0方差为1和中心化减去平均值。Patsy有内置的函数进行这样的工作 In [44]: y, X patsy.dmatrices(y ~ standardize(x0) center(x1), data)In [45]: X Out[45]: DesignMatrix with shape (5, 3)Intercept standardize(x0) center(x1)1 -1.41421 0.781 -0.70711 0.761 0.00000 1.021 0.70711 -3.331 1.41421 0.77Terms:Intercept (column 0)standardize(x0) (column 1)center(x1) (column 2)作为建模的一步你可能拟合模型到一个数据集然后用另一个数据集评估模型。另一个数据集可能是剩余的部分或是新数据。当执行中心化和标准化转变用新数据进行预测要格外小心。因为你必须使用平均值或标准差转换新数据集这也称作状态转换。 patsy.build_design_matrices函数可以使用原始样本数据集的保存信息来转换新数据 In [46]: new_data pd.DataFrame({....: x0: [6, 7, 8, 9],....: x1: [3.1, -0.5, 0, 2.3],....: y: [1, 2, 3, 4]})In [47]: new_X patsy.build_design_matrices([X.design_info], new_data)In [48]: new_X Out[48]: [DesignMatrix with shape (4, 3)Intercept standardize(x0) center(x1)1 2.12132 3.871 2.82843 0.271 3.53553 0.771 4.24264 3.07Terms:Intercept (column 0)standardize(x0) (column 1)center(x1) (column 2)]因为Patsy中的加号不是加法的意义当你按照名称将数据集的列相加时你必须用特殊I函数将它们封装起来 In [49]: y, X patsy.dmatrices(y ~ I(x0 x1), data)In [50]: X Out[50]: DesignMatrix with shape (5, 2)Intercept I(x0 x1)1 1.011 1.991 3.251 -0.101 5.00Terms:Intercept (column 0)I(x0 x1) (column 1)Patsy的patsy.builtins模块还有一些其它的内置转换。请查看线上文档。 分类数据有一个特殊的转换类下面进行讲解。 分类数据和Patsy 非数值数据可以用多种方式转换为模型设计矩阵。完整的讲解超出了本书范围最好和统计课一起学习。 当你在Patsy公式中使用非数值数据它们会默认转换为虚变量。如果有截距会去掉一个避免共线性 In [51]: data pd.DataFrame({....: key1: [a, a, b, b, a, b, a, b],....: key2: [0, 1, 0, 1, 0, 1, 0, 0],....: v1: [1, 2, 3, 4, 5, 6, 7, 8],....: v2: [-1, 0, 2.5, -0.5, 4.0, -1.2, 0.2, -1.7]....: })In [52]: y, X patsy.dmatrices(v2 ~ key1, data)In [53]: X Out[53]: DesignMatrix with shape (8, 2)Intercept key1[T.b]1 01 01 11 11 01 11 01 1Terms:Intercept (column 0)key1 (column 1)如果你从模型中忽略截距每个分类值的列都会包括在设计矩阵的模型中 In [54]: y, X patsy.dmatrices(v2 ~ key1 0, data)In [55]: X Out[55]: DesignMatrix with shape (8, 2)key1[a] key1[b]1 01 00 10 11 00 11 00 1Terms:key1 (columns 0:2)使用C函数数值列可以截取为分类量 In [56]: y, X patsy.dmatrices(v2 ~ C(key2), data)In [57]: X Out[57]: DesignMatrix with shape (8, 2)Intercept C(key2)[T.1]1 01 11 01 11 01 11 01 0Terms:Intercept (column 0)C(key2) (column 1)当你在模型中使用多个分类名事情就会变复杂因为会包括key1:key2形式的相交部分它可以用在方差ANOVA模型分析中 In [58]: data[key2] data[key2].map({0: zero, 1: one})In [59]: data Out[59]: key1 key2 v1 v2 0 a zero 1 -1.0 1 a one 2 0.0 2 b zero 3 2.5 3 b one 4 -0.5 4 a zero 5 4.0 5 b one 6 -1.2 6 a zero 7 0.2 7 b zero 8 -1.7In [60]: y, X patsy.dmatrices(v2 ~ key1 key2, data)In [61]: X Out[61]: DesignMatrix with shape (8, 3)Intercept key1[T.b] key2[T.zero]1 0 11 0 01 1 11 1 01 0 11 1 01 0 11 1 1Terms:Intercept (column 0)key1 (column 1)key2 (column 2)In [62]: y, X patsy.dmatrices(v2 ~ key1 key2 key1:key2, data)In [63]: X Out[63]: DesignMatrix with shape (8, 4)Intercept key1[T.b] key2[T.zero] key1[T.b]:key2[T.zero]1 0 1 01 0 0 01 1 1 11 1 0 01 0 1 01 1 0 01 0 1 01 1 1 1Terms:Intercept (column 0)key1 (column 1)key2 (column 2)key1:key2 (column 3)Patsy提供转换分类数据的其它方法包括以特定顺序转换。请参阅线上文档。 statsmodels介绍 statsmodels是Python进行拟合多种统计模型、进行统计试验和数据探索可视化的库。Statsmodels包含许多经典的统计方法但没有贝叶斯方法和机器学习模型。 statsmodels包含的模型有 线性模型广义线性模型和健壮线性模型线性混合效应模型方差ANOVA方法分析时间序列过程和状态空间模型广义矩估计 下面我会使用一些基本的statsmodels工具探索Patsy公式和pandasDataFrame对象如何使用模型接口。 估计线性模型 statsmodels有多种线性回归模型包括从基本比如普通最小二乘到复杂比如迭代加权最小二乘法的。 statsmodels的线性模型有两种不同的接口基于数组和基于公式。它们可以通过API模块引入 import statsmodels.api as sm import statsmodels.formula.api as smf为了展示它们的使用方法我们从一些随机数据生成一个线性模型 def dnorm(mean, variance, size1):if isinstance(size, int):size size,return mean np.sqrt(variance) * np.random.randn(*size)# For reproducibility np.random.seed(12345)N 100 X np.c_[dnorm(0, 0.4, sizeN),dnorm(0, 0.6, sizeN),dnorm(0, 0.2, sizeN)] eps dnorm(0, 0.1, sizeN) beta [0.1, 0.3, 0.5]y np.dot(X, beta) eps这里np.c_用于沿着第二个轴列方向连接数组。在这里它被用来将三个独立的正态分布随机数数组水平地连接起来形成一个矩阵。如果直接np那么生成的是一个一维数组因为没有传入嵌套列表。 这里我使用了“真实”模型和可知参数beta。此时dnorm可用来生成正态分布数据带有特定均值和方差。现在有 In [66]: X[:5] Out[66]: array([[-0.1295, -1.2128, 0.5042],[ 0.3029, -0.4357, -0.2542],[-0.3285, -0.0253, 0.1384],[-0.3515, -0.7196, -0.2582],[ 1.2433, -0.3738, -0.5226]])In [67]: y[:5] Out[67]: array([ 0.4279, -0.6735, -0.0909, -0.4895,-0.1289]) 像之前Patsy看到的线性模型通常要拟合一个截距。sm.add_constant函数可以添加一个截距的列到现存的矩阵 In [68]: X_model sm.add_constant(X)In [69]: X_model[:5] Out[69]: array([[ 1. , -0.1295, -1.2128, 0.5042],[ 1. , 0.3029, -0.4357, -0.2542],[ 1. , -0.3285, -0.0253, 0.1384],[ 1. , -0.3515, -0.7196, -0.2582],[ 1. , 1.2433, -0.3738, -0.5226]])sm.OLS类可以拟合一个普通最小二乘回归 In [70]: model sm.OLS(y, X)这个模型的fit方法返回了一个回归结果对象它包含估计的模型参数和其它内容 In [71]: results model.fit()In [72]: results.params Out[72]: array([ 0.1783, 0.223 , 0.501 ])对结果使用summary方法可以打印模型的详细诊断结果 In [73]: print(results.summary()) OLS Regression Results Dep. Variable: y R-squared: 0.430 Model: OLS Adj. R-squared: 0.413 Method: Least Squares F-statistic: 24.42 Date: Mon, 25 Sep 2017 Prob (F-statistic): 7.44e-12 Time: 14:06:15 Log-Likelihood: -34.305 No. Observations: 100 AIC: 74.61 Df Residuals: 97 BIC: 82.42 Df Model: 3 Covariance Type: nonrobust coef std err t P|t| [0.025 0.975] ------------------------------------------------------------------------------ x1 0.1783 0.053 3.364 0.001 0.073 0.283 x2 0.2230 0.046 4.818 0.000 0.131 0.315 x3 0.5010 0.080 6.237 0.000 0.342 0.660Omnibus: 4.662 Durbin-Watson: 2.201 Prob(Omnibus): 0.097 Jarque-Bera (JB): 4.098 Skew: 0.481 Prob(JB): 0.129 Kurtosis: 3.243 Cond. No. 1.74Warnings: [1] Standard Errors assume that the covariance matrix of the errors is correctly specified.这里的参数名为通用名x1, x2等等。假设所有的模型参数都在一个DataFrame中 In [74]: data pd.DataFrame(X, columns[col0, col1, col2])In [75]: data[y] yIn [76]: data[:5] Out[76]: col0 col1 col2 y 0 -0.129468 -1.212753 0.504225 0.427863 1 0.302910 -0.435742 -0.254180 -0.673480 2 -0.328522 -0.025302 0.138351 -0.090878 3 -0.351475 -0.719605 -0.258215 -0.489494 4 1.243269 -0.373799 -0.522629 -0.128941现在我们使用statsmodels的公式API和Patsy的公式字符串 In [77]: results smf.ols(y ~ col0 col1 col2, datadata).fit()In [78]: results.params Out[78]: Intercept 0.033559 col0 0.176149 col1 0.224826 col2 0.514808 dtype: float64In [79]: results.tvalues Out[79]: Intercept 0.952188 col0 3.319754 col1 4.850730 col2 6.303971 dtype: float64观察下statsmodels是如何返回Series结果的附带有DataFrame的列名。当使用公式和pandas对象时我们不需要使用add_constant。 给出一个样本外数据你可以根据估计的模型参数计算预测值 In [80]: results.predict(data[:5]) Out[80]: 0 -0.002327 1 -0.141904 2 0.041226 3 -0.323070 4 -0.100535 dtype: float64statsmodels的线性模型结果还有其它的分析、诊断和可视化工具。除了普通最小二乘模型还有其它的线性模型。 估计时间序列过程 statsmodels的另一模型类是进行时间序列分析包括自回归过程、卡尔曼滤波和其它态空间模型和多元自回归模型。 用自回归结构和噪声来模拟一些时间序列数据 init_x 4import random values [init_x, init_x] N 1000b0 0.8 b1 -0.4 noise dnorm(0, 0.1, N) for i in range(N):new_x values[-1] * b0 values[-2] * b1 noise[i]values.append(new_x)这个数据有AR(2)结构两个延迟参数是0.8和-0.4。拟合AR模型时你可能不知道滞后项的个数因此可以用较多的滞后量来拟合这个模型 In [82]: MAXLAGS 5In [83]: model sm.tsa.AR(values)In [84]: results model.fit(MAXLAGS)结果中的估计参数首先是截距其次是前两个参数的估计值 In [85]: results.params Out[85]: array([-0.0062, 0.7845, -0.4085, -0.0136, 0.015 , 0.0143]) 更多的细节以及如何解释结果超出了本书的范围可以通过statsmodels文档学习更多。 scikit-learn介绍 scikit-learn是一个广泛使用、用途多样的Python机器学习库。它包含多种标准监督和非监督机器学习方法和模型选择和评估、数据转换、数据加载和模型持久化工具。这些模型可以用于分类、聚合、预测和其它任务。 机器学习方面的学习和应用scikit-learn和TensorFlow解决实际问题的线上和纸质资料很多。本节中我会简要介绍scikit-learn API的风格。 写作此书的时候scikit-learn并没有和pandas深度结合但是有些第三方包在开发中。尽管如此pandas非常适合在模型拟合前处理数据集。 举个例子我用一个Kaggle竞赛的经典数据集关于泰坦尼克号乘客的生还率。我们用pandas加载测试和训练数据集 In [86]: train pd.read_csv(datasets/titanic/train.csv)In [87]: test pd.read_csv(datasets/titanic/test.csv)In [88]: train[:4] Out[88]: PassengerId Survived Pclass \ 0 1 0 3 1 2 1 1 2 3 1 3 3 4 1 1 Name Sex Age SibSp \ 0 Braund, Mr. Owen Harris male 22.0 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 2 Heikkinen, Miss. Laina female 26.0 0 3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 Parch Ticket Fare Cabin Embarked 0 0 A/5 21171 7.2500 NaN S 1 0 PC 17599 71.2833 C85 C 2 0 STON/O2. 3101282 7.9250 NaN S 3 0 113803 53.1000 C123 Sstatsmodels和scikit-learn通常不能接收缺失数据因此我们要查看列是否包含缺失值 In [89]: train.isnull().sum() Out[89]: PassengerId 0 Survived 0 Pclass 0 Name 0 Sex 0 Age 177 SibSp 0 Parch 0 Ticket 0 Fare 0 Cabin 687 Embarked 2 dtype: int64In [90]: test.isnull().sum() Out[90]: PassengerId 0 Pclass 0 Name 0 Sex 0 Age 86 SibSp 0 Parch 0 Ticket 0 Fare 1 Cabin 327 Embarked 0 dtype: int64在统计和机器学习的例子中根据数据中的特征一个典型的任务是预测乘客能否生还。模型现在训练数据集中拟合然后用样本外测试数据集评估。 我想用年龄作为预测值但是它包含缺失值。缺失数据补全的方法有多种我用的是一种简单方法用训练数据集的中位数补全两个表的空值 In [91]: impute_value train[Age].median()In [92]: train[Age] train[Age].fillna(impute_value)In [93]: test[Age] test[Age].fillna(impute_value)现在我们需要指定模型。我增加了一个列IsFemale作为“Sex”列的编码将Sex列生成一个新列IsFemale这里使用了一个条件表达式会产生一个布尔类型的Series然后使用astype(int)将布尔值转换为整数 In [94]: train[IsFemale] (train[Sex] female).astype(int)In [95]: test[IsFemale] (test[Sex] female).astype(int)然后我们确定一些模型变量并创建NumPy数组 In [96]: predictors [Pclass, IsFemale, Age]In [97]: X_train train[predictors].valuesIn [98]: X_test test[predictors].valuesIn [99]: y_train train[Survived].valuesIn [100]: X_train[:5] Out[100]: array([[ 3., 0., 22.],[ 1., 1., 38.],[ 3., 1., 26.],[ 1., 1., 35.],[ 3., 0., 35.]])In [101]: y_train[:5] Out[101]: array([0, 1, 1, 1, 0])我不能保证这是一个好模型但它的特征都符合。我们用scikit-learn的LogisticRegression模型创建一个模型实例 In [102]: from sklearn.linear_model import LogisticRegressionIn [103]: model LogisticRegression()与statsmodels类似我们可以用模型的fit方法将它拟合到训练数据 In [104]: model.fit(X_train, y_train) Out[104]: LogisticRegression(C1.0, class_weightNone, dualFalse, fit_interceptTrue,intercept_scaling1, max_iter100, multi_classovr, n_jobs1,penaltyl2, random_stateNone, solverliblinear, tol0.0001,verbose0, warm_startFalse)现在我们可以用model.predict对测试数据进行预测 In [105]: y_predict model.predict(X_test)In [106]: y_predict[:10] Out[106]: array([0, 0, 0, 0, 1, 0, 1, 0, 1, 0])如果你有测试数据集的真是值你可以计算准确率或其它错误度量值 (y_true y_predict).mean()在实际中模型训练经常有许多额外的复杂因素。许多模型有可以调节的参数有些方法比如交叉验证可以用来进行参数调节避免对训练数据过拟合。这通常可以提高预测性或对新数据的健壮性。 交叉验证通过分割训练数据来模拟样本外预测。基于模型的精度得分比如均方差可以对模型参数进行网格搜索。有些模型如logistic回归有内置的交叉验证的估计类。例如logisticregressioncv类可以用一个参数指定网格搜索对模型的正则化参数C的粒度 In [107]: from sklearn.linear_model import LogisticRegressionCVIn [108]: model_cv LogisticRegressionCV(10)In [109]: model_cv.fit(X_train, y_train) Out[109]: LogisticRegressionCV(Cs10, class_weightNone, cvNone, dualFalse,fit_interceptTrue, intercept_scaling1.0, max_iter100,multi_classovr, n_jobs1, penaltyl2, random_stateNone,refitTrue, scoringNone, solverlbfgs, tol0.0001, verbose0) 要手动进行交叉验证你可以使用cross_val_score帮助函数它可以处理数据分割。例如要交叉验证我们的带有四个不重叠训练数据的模型可以这样做 In [110]: from sklearn.model_selection import cross_val_scoreIn [111]: model LogisticRegression(C10)In [112]: scores cross_val_score(model, X_train, y_train, cv4)In [113]: scores Out[113]: array([ 0.7723, 0.8027, 0.7703, 0.7883])默认的评分指标取决于模型本身但是可以明确指定一个评分。交叉验证过的模型需要更长时间来训练但会有更高的模型性能。 继续学习 我只是介绍了一些Python建模库的表面内容现在有越来越多的框架用于各种统计和机器学习它们都是用Python或Python用户界面实现的。 这本书的重点是数据规整有其它的书是关注建模和数据科学工具的。其中优秀的有 Andreas Mueller and Sarah Guido (O’Reilly)的 《Introduction to Machine Learning with Python》Jake VanderPlas (O’Reilly)的 《Python Data Science Handbook》Joel Grus (O’Reilly) 的 《Data Science from Scratch: First Principles》Sebastian Raschka (Packt Publishing) 的《Python Machine Learning》Aurélien Géron (O’Reilly) 的《Hands-On Machine Learning with Scikit-Learn and TensorFlow》 虽然书是学习的好资源但是随着底层开源软件的发展书的内容会过时。最好是不断熟悉各种统计和机器学习框架的文档学习最新的功能和API。
http://www.w-s-a.com/news/549598/

相关文章:

  • 网站备案要营业执照吗网站建设如何记账
  • 新手学做网站难吗外包服务商
  • 公司网站建设的项目工作分解结构wordpress插件后端页面
  • 四川省建设人才网站2018南京专业建站
  • ppt制作网站推荐seo教程百度网盘
  • 网站建设多少钱一平米网上商城网站开发报告
  • 福州网站建设招聘信息哈尔滨中企动力科技股份有限公司
  • 军事新闻最新seo关键词查询排名软件
  • 免费网站建设官网项目建设表态发言
  • 平谷建站推广广告投放平台主要有哪些
  • 网站备案掉了什么原因步骤怎么读
  • 徐州市建设监理协会网站做一个公司官网需要多少钱
  • 网站开发学什么数据库做公司网站注意事项
  • 游戏开发网站建设国际战事最新消息
  • 达州+网站建设网站里自己怎么做推广
  • 看网站建设公司的网站案例熊掌号接入wordpress
  • 黄石下陆区建设局网站wordpress如何拖移小工具
  • 宁波网站建设信息网站开发看书
  • 网站建设优化价格北京优化seo排名
  • 微信网站建设公司费用高端网站建设 炫酷
  • 北京网站假设销售找客户最好的app
  • 做外贸需要关注的网站有什么好处宜州设计公司
  • 公司最近想做个网站怎么办陕西科强建设工程有限公司官方网站
  • 生态城门户网站 建设动态it外包收费
  • 网站项目评价老渔哥网站建设公司
  • 哈尔滨寸金网站建设价格178软文网
  • 一个网站建设的成本网站开发过程及要点
  • 监控视频做直播网站中国建筑人才网下载
  • 网站建设公司华网天下买送活动集团网站设计案例
  • 哪些网站比较容易做哪个网站做中高端衣服