首页 文章 精选 留言 我的

精选列表

搜索[文本预处理],共10005篇文章
优秀的个人博客,低调大师

机器学习实例-titanic数据预处理

加载数据集,打印前五行: import numpy as np import pandas as pd import seaborn as sns from scipy import stats,integrate import matplotlib.pyplot as plt %matplotlib inline data=pd.read_csv("Desktop/titanic_train.csv") print(data.head()) PassengerId Survived Pclass \0 1 0 3 1 2 1 1 2 3 1 3 3 4 1 1 4 5 0 3 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 4 Allen, Mr. William Henry male 35.0 0 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 S 4 0 373450 8.0500 NaN S 查看原始数据统计结果: print(data.describe()) PassengerId Survived Pclass Age SibSp \count 891.000000 891.000000 891.000000 714.000000 891.000000 mean 446.000000 0.383838 2.308642 29.699118 0.523008 std 257.353842 0.486592 0.836071 14.526497 1.102743 min 1.000000 0.000000 1.000000 0.420000 0.000000 25% 223.500000 0.000000 2.000000 20.125000 0.000000 50% 446.000000 0.000000 3.000000 28.000000 0.000000 75% 668.500000 1.000000 3.000000 38.000000 1.000000 max 891.000000 1.000000 3.000000 80.000000 8.000000 Parch Fare count 891.000000 891.000000 mean 0.381594 32.204208 std 0.806057 49.693429 min 0.000000 0.000000 25% 0.000000 7.910400 50% 0.000000 14.454200 75% 0.000000 31.000000 max 6.000000 512.329200 可以看到Age这一项有缺失值。 填充缺失值有很多种方法,最常见的比如说均值填充,中位数填充,等等。 首先看一下年龄数据的原始分布状况: sns.distplot(data["Age"].dropna(),kde=True,bins=50,fit=stats.gamma)#dropna()处理浮点数据 先用均值填充: data["Age"]=data["Age"].fillna(data["Age"].mean()) sns.distplot(data["Age"].dropna(),kde=True,bins=50,fit=stats.gamma) 可以明显看到图像已经变形,虽然也可以用均值填充的数据进行训练,但如果可以改进填充方式,就可以使数据分布更接近实际。 于是我们提取一些与年龄相关的特征,比如船票(年轻人通常比较穷,富人年纪大),家庭成员数量,兄弟姐妹数量,船舱等级等。 在正式训练数据前,先通过线性回归大致预测一下年龄缺失的部分人的年龄。 print(age_df.head(10)) Age Fare Parch SibSp Pclass0 22.000000 7.2500 0 1 31 38.000000 71.2833 0 1 12 26.000000 7.9250 0 0 33 35.000000 53.1000 0 1 14 35.000000 8.0500 0 0 35 27.525206 8.4583 0 0 36 54.000000 51.8625 0 0 17 2.000000 21.0750 1 3 38 27.000000 11.1333 2 0 39 14.000000 30.0708 0 1 2 可以看到,船票价格相比其他数据非常高,先对船票价格进行标准化处理 #标准化 from sklearn import preprocessing age_df=data[["Age","Fare","Parch","SibSp","Pclass"]].copy()#.copy()用于复制原始数据,否则在为DataFrame对象新增一列数据时会报错“A value is trying to be set on a copy of a slice from a DataFrame.” #scaler=preprocessing.StandardScaler() #age_df["Fare_scaled"]=scaler.fit_transform(age_df.loc[:,"Fare"])#数据维数问题出错了,暂不知如何解决 age_df["Fare_scaled"] = preprocessing.scale(age_df.loc[:,"Fare"]) print(age_df.head(10)) del age_df["Fare"] Age Fare Parch SibSp Pclass Fare_scaled0 22.000000 7.2500 0 1 3 -0.5024451 38.000000 71.2833 0 1 1 0.7868452 26.000000 7.9250 0 0 3 -0.4888543 35.000000 53.1000 0 1 1 0.4207304 35.000000 8.0500 0 0 3 -0.4863375 27.525206 8.4583 0 0 3 -0.4781166 54.000000 51.8625 0 0 1 0.3958147 2.000000 21.0750 1 3 3 -0.2240838 27.000000 11.1333 2 0 3 -0.4242569 14.000000 30.0708 0 1 2 -0.042956 数据处理结束,分割数据集: #分割有缺失值的数据集 known_age=age_df[age_df.Age.notnull()] unknown_age=age_df[age_df.Age.isnull()] #print(known_age.head()) x=known_age.iloc[:,1:] y=known_age.iloc[:,0] x_test=unknown_age.iloc[:,1:] y_pred=unknown_age.iloc[:,0] 训练模型,预测结果,填充缺失值: from sklearn import linear_model lr = linear_model.LinearRegression() model=lr.fit(x,y) y_pred=lr.predict(x_test) data.loc[data.Age.isnull(),"Age"]=y_pred sns.distplot(data["Age"].dropna(),kde=True,bins=50,fit=stats.gamma) 填充结果如上图,相比均值填充,通过模型填充缺失值得到了更符合真实分布的数据。

优秀的个人博客,低调大师

Preprocessing data-sklearn数据预处理

1. Standardization, or mean removal and variance scaling Standardization即标准化,尽量将数据转化为均值为零,方差为一的数据。 实际中我们会忽略数据的分布情况,仅仅是通过改变均值来集中数据,然后将非连续特征除以他们的标准差。 sklearn中 scale函数提供了简单 快速的 single array-like数据集操作 [python] view plain copy fromsklearnimportpreprocessing importnumpyasnp x=np.array([[1.,-1.,2.],[2.,0.,0.],[0.,1.,-1.]]) x_scaled=preprocessing.scale(x) printx_scaled output [[0.-1.224744871.33630621] [1.224744870.-0.26726124] [-1.224744871.22474487-1.06904497]] scale处理之后为零均值和单位方差: [python] view plain copy X_scaled.mean(axis=0)array([0.,0.,0.]) X_scaled.std(axis=0)array([1.,1.,1.]) StandardScaler 计算平均值和标准偏差在一个训练集,可以以后再申请相同的转换测试集。 [python] view plain copy scaler=preprocessing.StandardScaler().fit(X) scalerStandardScaler(copy=True,with_mean=True,with_std=True) scaler.mean_array([1....,0....,0.33...]) scaler.scale_array([0.81...,0.81...,1.24...]) scaler.transform(X)array([[0....,-1.22...,1.33...],[1.22...,0....,-0.26...],[-1.22...,1.22...,-1.06...]]) 同样的,将相同的转化应用到测试集合。 [python] view plain copy scaler.transform([[-1.,1.,0.]])array([[-2.44...,1.22...,-0.26...]]) 对于StandardScaler你也可以改变它的一些参数,例如 [python] view plain copy scaler=preprocessing.StandardScaler(copy=True,with_mean=True,with_std=True).fit(X) 1.1 Scaling features to a range 另一种标准化可以使用scal将特征标准化到指定的最大值和最小值之间,有连个函数: MinMaxScaler or MaxAbsScaler 例如转化到[0,1]之间 [python] view plain copy X_train=np.array([[1.,-1.,2.],...[2.,0.,0.],...[0.,1.,-1.]])... min_max_scaler=preprocessing.MinMaxScaler(copy=True,feature_range=(0,1)) X_train_minmax=min_max_scaler.fit_transform(X_train) X_train_minmaxarray([[0.5,0.,1.],[1.,0.5,0.33333333],[0.,1.,0.]]) 同理,它也可以直接用到后续的测试集中 [python] view plain copy X_test=np.array([[-3.,-1.,4.]]) X_test_minmax=min_max_scaler.transform(X_test) X_test_minmaxarray([[-1.5,0.,1.66666667]]) 如果MinMaxScaler给定了feature_range,其公式为 [python] view plain copy X_std=(X-X.min(axis=0))/(X.max(axis=0)-X.min(axis=0))X_scaled=X_std*(max-min)+min MaxAbsScaler 和scales工作很相似,但是 scales是将特征调整到特定值,而MaxAbsScaler对于本来中心店就是零或者稀疏的数据,是不会改变的。 1.2 Scaling sparse data 定心稀疏数据的稀疏结构会破坏数据,因此很少是一个明智的做法。然而,它可以合理规模稀疏的输入,特别是特性在不同的尺度上。 1.3 Scaling data with outliers 如果您的数据包含了许多异常值,扩展使用数据的均值和方差可能不能很好地工作。在这些情况下,您可以使用robust_scale和RobustScaler作为替代。他们使用更健壮的中心和范围的估计数据。 是否应该标准化数据: http://www.faqs.org/faqs/ai-faq/neural-nets/part2/section-16.html 据使用sklearn.decomposition.PCA or sklearn.decomposition.RandomizedPCA with whiten=True深入的移除特征中的线性相关性。 2. Normalization 正常化的过程是缩放单个样本的单位标准。这个过程可能是有用的,如果你打算使用二次形式如点积或任何其他内核量化任何一对样本的相似性。 normalize有l1 or l2两个标准 [python] view plain copy X=[[1.,-1.,2.],...[2.,0.,0.],...[0.,1.,-1.]] X_normalized=preprocessing.normalize(X,norm='l2') X_normalizedarray([[0.40...,-0.40...,0.81...],[1....,0....,0....],[0....,0.70...,-0.70...]]) 它也可以像前面一样的方式使用: [python] view plain copy normalizer=preprocessing.Normalizer().fit(X)#fitdoesnothing normalizer.transform(X) array([[0.40...,-0.40...,0.81...],[1....,0....,0....],[0....,0.70...,-0.70...]])normalizer.transform([[-1.,1.,0.]])array([[-0.70...,0.70...,0....]]) Sparse input normalize and Normalizer接受scipy密集的数组类和稀疏矩阵. 3. Binarization 特征二值化阈值的过程即转化为布尔值数值特性。 [python] view plain copy X=[[1.,-1.,2.],...[2.,0.,0.],...[0.,1.,-1.]] binarizer=preprocessing.Binarizer().fit(X)#fitdoesnothing binarizerBinarizer(copy=True,threshold=0.0) binarizer.transform(X)array([[1.,0.,1.],[1.,0.,0.],[0.,1.,0.]]) 调整threshold之后: [python] view plain copy binarizer=preprocessing.Binarizer(threshold=1.1) binarizer.transform(X)array([[0.,0.,1.],[1.,0.,0.],[0.,0.,0.]]) 支持Sparse input 4. Encoding categorical features 经常会有些特征并不是连续的数值化的特征,例如["male", "female"],它可以被表示成[1,2],当然,sklearn是不能直接做到这样的。 但是,它可以做到将这个估计将每个分类特性与m可能值转换成二进制特征,只有一个有效。 [python] view plain copy enc=preprocessing.OneHotEncoder() enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]]) OneHotEncoder(categorical_features='all',dtype=<...'float'>, handle_unknown='error',n_values='auto',sparse=True) enc.transform([[0,1,3]]).toarray() array([[1.,0.,0.,1.,0.,0.,0.,0.,1.]]) 其实可以通过从字典加载特征来实现上面的思想: [python] view plain copy measurements=[ {'city':'Dubai','temperature':33.}, {'city':'London','temperature':12.}, {'city':'SanFransisco','temperature':18.}, ] fromsklearn.feature_extractionimportDictVectorizer vec=DictVectorizer() vec.fit_transform(measurements).toarray()array([[1.,0.,0.,33.],[0.,1.,0.,12.],[0.,0.,1.,18.]]) vec.get_feature_names()['city=Dubai','city=London','city=SanFransisco','temperature'] 5. Imputation of missing values 由于各种原因,会导致真实世界中数据集会丢失部分值,如银行等。一种解决办法是去掉这些包含丢失值的行,当然,这样的话就会丢弃掉许多数据,因此可以采取更好的策略来填充丢失的数据,例如通过他们已知的数据来推测。 Imputer 提供基本的填充方法,例如使用均值或者中位数填充。当然还有许多其他的方法。 [python] view plain copy importnumpyasnp fromsklearn.preprocessingimportImputer imp=Imputer(missing_values='NaN',strategy='mean',axis=0) imp.fit([[1,2],[np.nan,3],[7,6]]) Imputer(axis=0,copy=True,missing_values='NaN',strategy='mean',verbose=0) X=[[np.nan,2],[6,np.nan],[7,6]] print(imp.transform(X)) [[4.2.] [6.3.666...] [7.6.]] 缺失值也可以使用0表示: [python] view plain copy importscipy.sparseassp X=sp.csc_matrix([[1,2],[0,3],[7,6]]) imp=Imputer(missing_values=0,strategy='mean',axis=0) imp.fit(X) Imputer(axis=0,copy=True,missing_values=0,strategy='mean',verbose=0) X_test=sp.csc_matrix([[0,2],[6,0],[7,6]]) print(imp.transform(X_test)) [[4.2.] [6.3.666...] [7.6.]] 6. Generating polynomial features 使用多项式特征,可以建立高阶特征和相互关联的特征: [python] view plain copy importnumpyasnp fromsklearn.preprocessingimportPolynomialFeatures X=np.arange(6).reshape(3,2) X array([[0,1], [2,3], [4,5]]) poly=PolynomialFeatures(2) poly.fit_transform(X) array([[1.,0.,1.,0.,0.,1.], [1.,2.,3.,4.,6.,9.], [1.,4.,5.,16.,20.,25.]]) 转换 设置 interaction_only=True, 时只使用交互作用项 [python] view plain copy X=np.arange(9).reshape(3,3) X array([[0,1,2], [3,4,5], [6,7,8]]) poly=PolynomialFeatures(degree=3,interaction_only=True) poly.fit_transform(X) array([[1.,0.,1.,2.,0.,0.,2.,0.], [1.,3.,4.,5.,12.,15.,20.,60.], [1.,6.,7.,8.,42.,48.,56.,336.]]) 转换为: 扩展维度之后的效果。 7. Custom transformers FunctionTransformer . 可以在传递途径( pipeline )中使用转换。 以下是使用 log transformation情况。 [python] view plain copy importnumpyasnp fromsklearn.preprocessingimportFunctionTransformer transformer=FunctionTransformer(np.log1p) X=np.array([[0,1],[2,3]]) transformer.transform(X) array([[0.,0.69314718], [1.09861229,1.38629436]]) 转载。原文: http://blog.csdn.net/shine19930820/article/details/50915361/

优秀的个人博客,低调大师

Python数据预处理:使用Dask和Numba并行化加速

如果你善于使用Pandas变换数据、创建特征以及清洗数据等,那么你就能够轻松地使用Dask和Numba并行加速你的工作。单纯从速度上比较,Dask完胜Python,而Numba打败Dask,那么Numba+Dask基本上算是无敌的存在。将数值计算分成Numba sub-function和使用Dask map_partition+apply,而不是使用Pandas。对于100万行数据,使用Pandas方法和混合数值计算创建新特征的速度比使用Numba+Dask方法的速度要慢许多倍。 Python:60.9x | Dask:8.4x | Numba:5.8x |Numba+Dask:1x 作为旧金山大学的一名数据科学硕士,会经常跟数据打交道。使用Apply函数是我用来创建新特征或清理数据的众多技巧之一。现在,我只是一名数据科学家,而不是计

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册