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

哈尔滨酒店网站建设网站建设氺金手指排名15

哈尔滨酒店网站建设,网站建设氺金手指排名15,专业网站seo优化公司,wordpress 下载安装SKLEARN Scikit-learn与特征工程 “数据决定了机器学习的上限#xff0c;而算法只是尽可能逼近这个上限”#xff0c;这句话很好的阐述了数据在机器学习中的重要性。大部分直接拿过来的数据都是特征不明显的、没有经过处理的或者说是存在很多无用的数据#xff0c;那么需要…SKLEARN Scikit-learn与特征工程 “数据决定了机器学习的上限而算法只是尽可能逼近这个上限”这句话很好的阐述了数据在机器学习中的重要性。大部分直接拿过来的数据都是特征不明显的、没有经过处理的或者说是存在很多无用的数据那么需要进行一些特征处理特征的缩放等等满足训练数据的要求。 Scikit-learn Python语言的机器学习工具 所有人都适用可在不同的上下文中重用 基于NumPy、SciPy和matplotlib构建 开源、商业可用 - BSD许可 目前稳定版本0.18 自2007年发布以来scikit-learn已经成为最给力的Python机器学习库library了。scikit-learn支持的机器学习算法包括分类回归降维和聚类。还有一些特征提取extracting features、数据处理processing data和模型评估evaluating models的模块。作为Scipy库的扩展scikit-learn也是建立在Python的NumPy和matplotlib库基础之上。NumPy可以让Python支持大量多维矩阵数据的高效操作matplotlib提供了可视化工具SciPy带有许多科学计算的模型。     scikit-learn文档完善容易上手丰富的API使其在学术界颇受欢迎。开发者用scikit-learn实验不同的算法只要几行代码就可以搞定。scikit-learn包括许多知名的机器学习算法的实现包括LIBSVM和LIBLINEAR。还封装了其他的Python库如自然语言处理的NLTK库。另外scikit-learn内置了大量数据集允许开发者集中于算法设计节省获取和整理数据集的时间。 数据的特征工程 从数据中抽取出来的对预测结果有用的信息通过专业的技巧进行数据处理是的特征能在机器学习算法中发挥更好的作用。优质的特征往往描述了数据的固有结构。 最初的原始特征数据集可能太大或者信息冗余因此在机器学习的应用中一个初始步骤就是选择特征的子集或构建一套新的特征集减少功能来促进算法的学习提高泛化能力和可解释性。 例如你要查看不同地域女性的穿衣品牌情况预测不同地域的穿衣品牌。如果其中含有一些男性的数据是不是要将这些数据给去除掉 特征工程的意义 更好的特征意味着更强的鲁棒性 更好的特征意味着只需用简单模型 更好的特征意味着更好的结果 特征工程之特征处理 特征工程中最重要的一个环节就是特征处理特征处理包含了很多具体的专业技巧 特征预处理 单个特征 归一化 标准化 缺失值 多个特征 降维 PCA 特征工程之特征抽取与特征选择 如果说特征处理其实就是在对已有的数据进行运算达到我们目标的数据标准。特征抽取则是将任意数据格式例如文本和图像转换为机器学习的数字特征。而特征选择是在已有的特征中选择更好的特征。后面会详细介绍特征选择主要区别于降维。 数据的来源与类型 大部分的数据都来自已有的数据库如果没有的话也可以交给很多爬虫工程师去采集来提供。也可以来自平时的记录反正数据无处不在大都是可用的。 数据的类型 按照机器学习的数据分类我们可以将数据分成 标称型标称型目标变量的结果只在有限目标集中取值如真与假(标称型目标变量主要用于分类) 数值型数值型目标变量则可以从无限的数值集合中取值如0.10042.001等 (数值型目标变量主要用于回归分析) 按照数据的本身分布特性 离散型 连续型 那么什么是离散型和连续型数据呢首先连续型数据是有规律的,离散型数据是没有规律的 离散变量是指其数值只能用自然数或整数单位计算的则为离散变量.例如班级人数、进球个数、是否是某个类别等等 连续型数据是指在指定区间内可以是任意一个数值,例如票房数据、花瓣大小分布数据 数据的特征抽取 现实世界中多数特征都不是连续变量比如分类、文字、图像等为了对非连续变量做特征表述需要对这些特征做数学化表述因此就用到了特征提取. sklearn.feature_extraction提供了特征提取的很多方法 分类特征变量提取 我们将城市和环境作为字典数据来进行特征的提取。 sklearn.feature_extraction.DictVectorizer(sparse True) 将映射列表转换为Numpy数组或scipy.sparse矩阵 sparse 是否转换为scipy.sparse矩阵表示默认开启 方法 fit_transform(X,y) 应用并转化映射列表Xy为目标类型 inverse_transform(X[, dict_type]) 将Numpy数组或scipy.sparse矩阵转换为映射列表 from sklearn.feature_extraction import DictVectorizer onehot DictVectorizer() # 如果结果不用toarray请开启sparseFalse instances [{city: 北京,temperature:100},{city: 上海,temperature:60}, {city: 深圳,temperature:30}] X onehot.fit_transform(instances).toarray() print(onehot.inverse_transform(X))文本特征提取只限于英文 文本的特征提取应用于很多方面比如说文档分类、垃圾邮件分类和新闻分类。那么文本分类是通过词是否存在、以及词的概率重要性来表示。 (1)文档的中词的出现 数值为1表示词表中的这个词出现为0表示未出现 sklearn.feature_extraction.text.CountVectorizer() 将文本文档的集合转换为计数矩阵scipy.sparse matrices 方法 fit_transform(raw_documents,y) 学习词汇词典并返回词汇文档矩阵 from sklearn.feature_extraction.text import CountVectorizer content [life is short,i like python,life is too long,i dislike python] vectorizer CountVectorizer() print(vectorizer.fit_transform(content).toarray())需要toarray()方法转变为numpy的数组形式 温馨提示每个文档中的词只是整个语料库中所有词的很小的一部分这样造成特征向量的稀疏性很多值为0为了解决存储和运算速度的问题使用Python的scipy.sparse矩阵结构 (2)TF-IDF表示词的重要性 TfidfVectorizer会根据指定的公式将文档中的词转换为概率表示。朴素贝叶斯介绍详细的用法 class sklearn.feature_extraction.text.TfidfVectorizer() 方法 from sklearn.feature_extraction.text import TfidfVectorizer content [life is short,i like python,life is too long,i dislike python] vectorizer TfidfVectorizer(stop_wordsenglish) print(vectorizer.fit_transform(content).toarray()) print(vectorizer.vocabulary_)fit_transform(raw_documents,y) 学习词汇和idf返回术语文档矩阵 数据的特征预处理 单个特征 1归一化 归一化首先在特征维度非常多的时候可以防止某一维或某几维对数据影响过大也是为了把不同来源的数据统一到一个参考区间下这样比较起来才有意义其次可以程序可以运行更快。 例如一个人的身高和体重两个特征假如体重50kg身高175cm,由于两个单位不一样数值大小不一样。如果比较两个人的体型差距时那么身高的影响结果会比较大k-临近算法会有这个距离公式。 min-max方法 常用的方法是通过对原始数据进行线性变换把数据映射到[0,1]之间变换的函数为 其中min是样本中最小值max是样本中最大值注意在数据流场景下最大值最小值是变化的另外最大值与最小值非常容易受异常点影响所以这种方法鲁棒性较差只适合传统精确小数据场景。 min-max自定义处理 这里我们使用相亲约会对象数据在MatchData.txt这个样本时男士的数据三个特征玩游戏所消耗时间的百分比、每年获得的飞行常客里程数、每周消费的冰淇淋公升数。然后有一个 所属类别被女士评价的三个类别不喜欢、魅力一般、极具魅力。 首先导入数据进行矩阵转换处理 def data_matrix(file_name):将文本转化为matrix:param file_name: 文件名:return: 数据矩阵fropen(file_name)array_linesfr.readlines()number_lineslen(array_lines)return_matnp.zeros((number_lines,3))index0for line in array_lines:lineline.strip()#Python strip() 方法用于移除字符串头尾指定的字符默认为空格或换行符或字符序列。list_lineline.split(\t)return_mat[index,:]list_line[0:3]return return_mat我们查看数据集会发现有的数值大到几万有的才个位数同样如果计算两个样本之间的距离时其中一个影响会特别大。也就是说飞行里程数对于结算结果或者说相亲结果影响较大但是统计的人觉得这三个特征同等重要所以需要将数据进行这样的处理。 这样每个特征任意的范围将变成[0,1]的区间内的值或者也可以根据需求处理到[-1,1]之间我们再定义一个函数进行这样的转换 def feature_normal(data_set):特征归一化:param data_set::return:#每列最小值min_valsdata_set.min(0)# 每列最大值max_vals data_set.max(0)rangesmax_vals-min_valsnorm_datanp.zeros(np.shape(data_set))#得出行数mdata_set.shape[0]#1为列#矩阵相减norm_datadata_set-np.tile(min_vals,(m,1))#第一个参数为Y轴扩大倍数第二个为X轴扩大倍数。本例中X轴扩大一倍便为不复制#矩阵相除norm_datanorm_data/np.tile(ranges,(m,1))return norm_data 3标准化 常用的方法是z-score标准化经过处理后的数据均值为0标准差为1处理方法是 其中 μ\mu μ是样本的均值 σ\sigma σ是样本的标准差它们可以通过现有的样本进行估计在已有的样本足够多的情况下比较稳定适合嘈杂的数据场景 sklearn中提供了StandardScalar类实现列标准化 In [2]: import numpy as npIn [3]: X_train np.array([[ 1., -1., 2.],[ 2., 0., 0.],[ 0., 1., -1.]])In [4]: from sklearn.preprocessing import StandardScalerIn [5]: std StandardScaler()In [6]: X_train_std std.fit_transform(X_train)In [7]: X_train_std Out[7]: array([[ 0. , -1.22474487, 1.33630621],[ 1.22474487, 0. , -0.26726124],[-1.22474487, 1.22474487, -1.06904497]])3缺失值 由于各种原因许多现实世界的数据集包含缺少的值通常编码为空白NaN或其他占位符。然而这样的数据集与scikit的分类器不兼容它们假设数组中的所有值都是数字并且都具有和保持含义。使用不完整数据集的基本策略是丢弃包含缺失值的整个行和/或列。然而这是以丢失可能是有价值的数据即使不完整的代价。更好的策略是估算缺失值即从已知部分的数据中推断它们。 (1)填充缺失值 使用sklearn.preprocessing中的Imputer类进行数据的填充 class Imputer(sklearn.base.BaseEstimator, sklearn.base.TransformerMixin)用于完成缺失值的补充:param param missing_values: integer or NaN, optional (defaultNaN)丢失值的占位符对于编码为np.nan的缺失值使用字符串值“NaN”:param strategy: string, optional (defaultmean)插补策略如果是“平均值”则使用沿轴的平均值替换缺失值如果为“中位数”则使用沿轴的中位数替换缺失值如果“most_frequent”则使用沿轴最频繁的值替换缺失:param axis: integer, optional (default0)插补的轴如果axis 0则沿列排列如果axis 1则沿行排列import numpy as npfrom sklearn.preprocessing import Imputerimp Imputer(missing_valuesNaN, strategymean, axis0)imp.fit([[1, 2], [np.nan, 3], [7, 6]]) Imputer(axis0, copyTrue, missing_valuesNaN, strategymean, verbose0)X [[np.nan, 2], [6, np.nan], [7, 6]]print(imp.transform(X)) [[ 4. 2. ][ 6. 3.666...][ 7. 6. ]]多个特征 降维 PCAPrincipal component analysis主成分分析。特点是保存数据集中对方差影响最大的那些特征PCA极其容易受到数据中特征范围影响所以在运用PCA前一定要做特征标准化这样才能保证每维度特征的重要性等同 class PCA(sklearn.decomposition.base)主成成分分析:param n_components: int, float, None or string这个参数可以帮我们指定希望PCA降维后的特征维度数目。最常用的做法是直接指定降维到的维度数目此时n_components是一个大于1的整数。我们也可以用默认值即不输入n_components此时n_componentsmin(样本数特征数):param whiten: bool, optional (default False)判断是否进行白化。所谓白化就是对降维后的数据的每个特征进行归一化。对于PCA降维本身来说一般不需要白化,如果你PCA降维后有后续的数据处理动作可以考虑白化默认值是False即不进行白化:param svd_solver:选择一个合适的SVD算法来降维,一般来说使用默认值就够了import numpy as npfrom sklearn.decomposition import PCAX np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])pca PCA(n_components2)pca.fit(X) PCA(copyTrue, iterated_powerauto, n_components2, random_stateNone,svd_solverauto, tol0.0, whitenFalse)数据的特征选择 降维本质上是从一个维度空间映射到另一个维度空间特征的多少别没有减少当然在映射的过程中特征值也会相应的变化。举个例子现在的特征是1000维我们想要把它降到500维。降维的过程就是找个一个从1000维映射到500维的映射关系。原始数据中的1000个特征每一个都对应着降维后的500维空间中的一个值。假设原始特征中有个特征的值是9那么降维后对应的值可能是3。而对于特征选择来说有很多方法 Filter(过滤式):VarianceThreshold Embedded(嵌入式)正则化、决策树 Wrapper(包裹式) 其中过滤式的特征选择后数据本身不变而数据的维度减少。而嵌入式的特征选择方法也会改变数据的值维度也改变。Embedded方式是一种自动学习的特征选择方法后面讲到具体的方法的时候就能理解了。 特征选择主要有两个功能 1减少特征数量降维使模型泛化能力更强减少过拟合 2增强特征和特征值之间的理解 sklearn.feature_selection 去掉取值变化小的特征删除低方差特征 VarianceThreshold 是特征选择中的一项基本方法。它会移除所有方差不满足阈值的特征。默认设置下它将移除所有方差为0的特征即那些在所有样本中数值完全相同的特征。 pca 字典数据提取 from sklearn.feature_extraction import DictVectorizerdef dictvec():字典数据抽取:return: None# 实例化dictDictVectorizer(sparseFalse)#调用fit_transformdatadict.fit_transform([{city: 北京,temperature: 100}, {city: 上海,temperature:60}, {city: 深圳,temperature:30}])print(dict.get_feature_names())print(dict.inverse_transform(data))print(data)return None[city上海, city北京, city深圳, temperature] [{city北京: 1.0, temperature: 100.0}, {city上海: 1.0, temperature: 60.0}, {city深圳: 1.0, temperature: 30.0}] [[ 0. 1. 0. 100.][ 1. 0. 0. 60.][ 0. 0. 1. 30.]]def dictvec():字典数据抽取:return: None# 实例化dictDictVectorizer()#调用fit_transformdatadict.fit_transform([{city: 北京,temperature: 100}, {city: 上海,temperature:60}, {city: 深圳,temperature:30}])print(dict.get_feature_names())print(dict.inverse_transform(data))print(data)return None[city上海, city北京, city深圳, temperature] [{city北京: 1.0, temperature: 100.0}, {city上海: 1.0, temperature: 60.0}, {city深圳: 1.0, temperature: 30.0}](0, 1) 1.0(0, 3) 100.0(1, 0) 1.0(1, 3) 60.0(2, 2) 1.0(2, 3) 30.0 文本进行特征化 from sklearn.feature_extraction.text import CountVectorizer def countevc():对文本进行特征值化:return: NonecvCountVectorizer()datacv.fit_transform([人生 苦短我 喜欢 python, 人生漫长不用 python])print(cv.get_feature_names())print(data.toarray())return None[python, 不用, 人生, 人生漫长, 喜欢, 苦短] [[1 0 1 0 1 1][1 1 0 1 0 0]] 中文分词 import jieba def cutword():con1jieba.cut(今天很残酷明天更残酷后天很美好但绝对大部分是死在明天晚上所以每个人不要放弃今天。)con2 jieba.cut(我们看到的从很远星系来的光是在几百万年之前发出的这样当我们看到宇宙时我们是在看它的过去。)con3 jieba.cut(如果只用一种方式了解某样事物你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。)#转换成列表content1list(con1)content2 list(con2)content3 list(con3)#转换成字符串c1 .join(content1)c2 .join(content2)c3 .join(content3)print(c1,c2,c3)return c1, c2 ,c3中文特征值化 def hanzivec():中文特征值化:return: Nonec1,c2,c3cutword()print(c1,c2,c3)cvCountVectorizer()datacv.fit_transform([c1,c2,c3])print(cv.get_feature_names())print(data.toarray())return None今天 很 残酷 明天 更 残酷 后天 很 美好 但 绝对 大部分 是 死 在 明天 晚上 所以 每个 人 不要 放弃 今天 。 我们 看到 的 从 很 远 星系 来 的 光是在 几百万年 之前 发出 的 这样 当 我们 看到 宇宙 时 我们 是 在 看 它 的 过去 。 如果 只用 一种 方式 了解 某样 事物 你 就 不会 真正 了解 它 。 了解 事物 真正 含义 的 秘密 取决于 如何 将 其 与 我们 所 了解 的 事物 相 联系 。 [一种, 不会, 不要, 之前, 了解, 事物, 今天, 光是在, 几百万年, 发出, 取决于, 只用, 后天, 含义, 大部分, 如何, 如果, 宇宙, 我们, 所以, 放弃, 方式, 明天, 星系, 晚上, 某样, 残酷, 每个, 看到, 真正, 秘密, 绝对, 美好, 联系, 过去, 这样] [[0 0 1 0 0 0 2 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 2 0 1 0 2 1 0 0 0 1 1 0 0 0][0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 3 0 0 0 0 1 0 0 0 0 2 0 0 0 0 0 1 1][1 1 0 0 4 3 0 0 0 0 1 1 0 1 0 1 1 0 1 0 0 1 0 0 0 1 0 0 0 2 1 0 0 1 0 0]]中文分割特征处理 from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer def tfidfvec():中文特征值化:return: Nonec1,c2,c3cutword()print(c1,c2,c3)tfTfidfVectorizer()datatf.fit_transform([c1,c2,c3])print(tf.get_feature_names())print(data.toarray())return None今天 很 残酷 明天 更 残酷 后天 很 美好 但 绝对 大部分 是 死 在 明天 晚上 所以 每个 人 不要 放弃 今天 。 我们 看到 的 从 很 远 星系 来 的 光是在 几百万年 之前 发出 的 这样 当 我们 看到 宇宙 时 我们 是 在 看 它 的 过去 。 如果 只用 一种 方式 了解 某样 事物 你 就 不会 真正 了解 它 。 了解 事物 真正 含义 的 秘密 取决于 如何 将 其 与 我们 所 了解 的 事物 相 联系 。 今天 很 残酷 明天 更 残酷 后天 很 美好 但 绝对 大部分 是 死 在 明天 晚上 所以 每个 人 不要 放弃 今天 。 我们 看到 的 从 很 远 星系 来 的 光是在 几百万年 之前 发出 的 这样 当 我们 看到 宇宙 时 我们 是 在 看 它 的 过去 。 如果 只用 一种 方式 了解 某样 事物 你 就 不会 真正 了解 它 。 了解 事物 真正 含义 的 秘密 取决于 如何 将 其 与 我们 所 了解 的 事物 相 联系 。 [一种, 不会, 不要, 之前, 了解, 事物, 今天, 光是在, 几百万年, 发出, 取决于, 只用, 后天, 含义, 大部分, 如何, 如果, 宇宙, 我们, 所以, 放弃, 方式, 明天, 星系, 晚上, 某样, 残酷, 每个, 看到, 真正, 秘密, 绝对, 美好, 联系, 过去, 这样] [[0. 0. 0.21821789 0. 0. 0.0.43643578 0. 0. 0. 0. 0.0.21821789 0. 0.21821789 0. 0. 0.0. 0.21821789 0.21821789 0. 0.43643578 0.0.21821789 0. 0.43643578 0.21821789 0. 0.0. 0.21821789 0.21821789 0. 0. 0. ][0. 0. 0. 0.2410822 0. 0.0. 0.2410822 0.2410822 0.2410822 0. 0.0. 0. 0. 0. 0. 0.24108220.55004769 0. 0. 0. 0. 0.24108220. 0. 0. 0. 0.48216441 0.0. 0. 0. 0. 0.2410822 0.2410822 ][0.15698297 0.15698297 0. 0. 0.62793188 0.470948910. 0. 0. 0. 0.15698297 0.156982970. 0.15698297 0. 0.15698297 0.15698297 0.0.1193896 0. 0. 0.15698297 0. 0.0. 0.15698297 0. 0. 0. 0.313965940.15698297 0. 0. 0.15698297 0. 0. ]]归一化处理 from sklearn.preprocessing import MinMaxScalerdef mm():归一化处理:return: NOnemmMinMaxScaler()datamm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])print(data)return None[[1. 0. 0. 0. ][0. 1. 1. 0.83333333][0.5 0.5 0.6 1. ]]标准化 from sklearn.preprocessing import MinMaxScaler,StandardScaler def stand():标准化缩放:return:stdStandardScaler()datastd.fit_transform([[ 1., -1., 3.],[ 2., 4., 2.],[ 4., 6., -1.]])print(data)return None[[-1.06904497 -1.35873244 0.98058068][-0.26726124 0.33968311 0.39223227][ 1.33630621 1.01904933 -1.37281295]]缺失值处理 from sklearn.preprocessing import MinMaxScaler,StandardScaler,Imputer import numpy as npdef im():缺失值处理:return:NOne# NaN, nanimImputer(missing_valuesNaN,strategymean,axis0)dataim.fit_transform([[1, 2], [np.nan, 3], [7, 6]])print(data)return None[[1. 2.] C:\Users\HP\Anaconda3\lib\site-packages\sklearn\utils\deprecation.py:58: DeprecationWarning: Class Imputer is deprecated; Imputer was deprecated in version 0.20 and will be removed in 0.22. Import impute.SimpleImputer from sklearn instead.[4. 3.]warnings.warn(msg, categoryDeprecationWarning)[7. 6.]] 特征选择 删除低方差 from sklearn.feature_selection import VarianceThresholddef var():特征选择-删除低方差的特征:return: NonevarVarianceThreshold(threshold1.0)data var.fit_transform([[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]])print(data)return None[[0][4][1]] PCA def pca():主成分分析进行特征降维:return: NonepcaPCA(n_components0.9)datapca.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])print(data)return None [[ 1.22879107e-15 3.82970843e00][ 5.74456265e00 -1.91485422e00][-5.74456265e00 -1.91485422e00]]
http://www.yutouwan.com/news/413080/

相关文章:

  • 湖北住房城乡建设厅网站首页网站开发需求单
  • 网站开发都有什么端页面设计升级
  • 天津谷歌优化公司好搜网惠州seo
  • 网站备案进程查询网站备案背景幕布是什么
  • 山东省高中生发展报告在哪个网站做网络投放广告平台
  • 网站服务器维护价格如何做响应式布局网站
  • 天津市建设工程监理公司网站域名是干嘛用的
  • 上市公司做家具网站wordpress浏览数插件
  • 微信分销网站建设官网搬瓦工 wordpress
  • 网站服务器错误怎么办深圳市宝安区龙华公司是干什么的
  • 深圳网站制作厂家网络培训系统
  • 黄浦区网站建设eclipse wordpress
  • 新闻类的网站如何做优化、新网站如何做免费推广
  • 建设证件查询官方网站二级域名的网站备案
  • 微软网站制作软件安徽省交通运输厅金良
  • 虚拟机中建设iis网站外贸推广哪个公司好
  • 上海 网站开发 工作室wordpress 搭建教程
  • 中国建设银行注册网站怎么自己做网站赚钱吗
  • 建设主管部门门户网站个人网站怎么制作教程
  • 用户体验不好的网站网络游戏排行榜百度风云榜
  • 网站营销的重点关于做网站的策划书
  • html 模板网站wordpress程序 wp
  • 用云空间制作网站建设网络强国论文
  • 网站核心推广思路建设棋牌类网站要多少钱
  • 网上购物都有哪些网站邳州网页定制
  • 在线查看网站源码营销方式有哪几种
  • 网店网站开发文字排版网站
  • 网页设计比较好的网站怎样注册免费域名
  • 杨凯做网站烟台做网站要多少钱
  • 佛山网站建设骏域网站建设专家工作细胞中文版免费完整版第一季