机器学习实例(2)

接上节机器学习实例(1):
接下来我们要做的工作是屡清楚数据集的各个特征的特点,针对不同的特征提出不同的处理方法:

由于机器学习处理的都是都是数值信息,但是数据集有一部分是文本信息,这就需要对不同的文本信息进行不同的处理了。即下一步工作:

  1. 特征的类别信息
age:连续性数值变量;可能的处理方法:分年龄段;
workcass: Private, Self-emp-not-inc, Self-emp-inc, Federal-gov, 			       Local-gov,State-gov, Without-pay, Never-worked.
 :雇主类型,多类别,一般处理方法:化为数值类别,比如以上八个可以分别表示为1-8(仅为示例,本文并不推荐);
fnlwgt: 连续性数值变量;人口普查员认为观察值的人数。该变量在本文不被使用,笔者认为该特征并不重要。
education: Bachelors, Some-college, 11th, HS-grad, Prof-school, Assoc-acdm,Assoc-voc, 9th, 7th-8th, 12th, Masters, 1st-4th, 10th, Doctorate, 5th-6th,Preschool.受教育程度,多类别数据,处理方法同workcass;
education-num: 连续性数值变量,受教育水平年限,一般来讲,该值越大,工资越高;
marital-status: Married-civ-spouse, Divorced, Never-married, Separated,Widowed, Married-spouse-absent, Married-AF-spouse.婚姻状况,多类别数据;
occupation: Tech-support, Craft-repair, Other-service, Sales, Exec-managerial,Prof-specialty, Handlers-cleaners, Machine-op-inspct, Adm-clerical,Farming-fishing, Transport-moving, Priv-house-serv, Protective-serv,Armed-Forces.职业,多类别数据;
relationship: Wife, Own-child, Husband, Not-in-family, Other-relative,Unmarried.群体性关系,多类别数据;
race: White, Asian-Pac-Islander, Amer-Indian-Eskimo, Other, Black.种族,多类别数据,虽然美国反对种族歧视,但是实际上这个在区分美国工资的时候蛮重要;
sex: Female, Male.性别,最简单的二分法(0&1);
capital-gain: 资本收益,连续数值;
capital-loss: 资本损失,连续数值;
hours-per-week: 工作时间,连续数值;
native-country: United-States, Cambodia, England, Puerto-Rico, Canada,Germany, Outlying-US(Guam-USVI-etc), India, Japan, Greece, South, China,Cuba, Iran, Honduras, Philippines, Italy, Poland, Jamaica, Vietnam, Mexico,Portugal, Ireland, France, Dominican-Republic, Laos, Ecuador, Taiwan, Haiti,Columbia, Hungary, Guatemala, Nicaragua, Scotland, Thailand, Yugoslavia,El-Salvador, Trinadad&Tobago, Peru, Hong, Holand-Netherlands.国籍,多类别数据;
result:结果:“>50K”或“<=50K”,二分类数据,也是本文机器学习的目的(0&1);

2.特征处理:
可以看到目前,特征无非分三类:

  1. 连续性数值特征,如age,最好处理;
  2. 二分类文本信息,二分法处理;
  3. 多类别文本信息,
    现在进行特征处理:
    先查看数据集的缺失情况:
adult.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 32561 entries, 0 to 32560
Data columns (total 15 columns):
age               32561 non-null int64
workclass         32561 non-null object
fnlwgt            32561 non-null int64
education         32561 non-null object
education-num     32561 non-null int64
marital-status    32561 non-null object
occupation        32561 non-null object
relationship      32561 non-null object
race              32561 non-null object
sex               32561 non-null object
capital-gain      32561 non-null int64
capital-loss      32561 non-null int64
hours-per-week    32561 non-null int64
native-country    32561 non-null object
result            32561 non-null object
dtypes: int64(6), object(9)
memory usage: 3.7+ MB

或者第二种方法:

adult.isnull().any()

age               False
workclass         False
fnlwgt            False
education         False
education-num     False
marital-status    False
occupation        False
relationship      False
race              False
sex               False
capital-gain      False
capital-loss      False
hours-per-week    False
native-country    False
result            False
dtype: bool

但是实际情况呢:
这里写图片描述
打开实际的csv文件进行查看,很容易可以看到红色部分“?”其实属于无效字符,虽未缺失(nan),实则无用,也是我们要想办法去掉的;
这里有个小技巧:
先来看

adult.shape

(32561, 15)

可以看到目前32561行数据,我们借助正则表达式,用nan代替‘?’:

adult_clean=adult.replace(regex=[r'\?|\.|\$'],value=np.nan)
这里用nan代替 ?  .   $ 三种符号,按照自己写法和数据替换

此时再来查看:

adult_clean.isnull().any()

age               False
workclass          True
fnlwgt            False
education         False
education-num     False
marital-status    False
occupation         True
relationship      False
race              False
sex               False
capital-gain      False
capital-loss      False
hours-per-week    False
native-country     True
result            False
dtype: bool

然后我们将所有含有缺失值的行都去掉,对于有些数据集,有的为空值填充均值,但是此数据集要预测收入,所以我在这里直接去掉,并不影响结果,如果此处填充均值,训练集反而会受到精度影响;

adult=adult_clean.dropna(how='any')
#凡是含有nan的行一律去掉

再来查看:

adult.shape

(30162, 15)

有大概2000行的某些特征存在数据不齐整,到此为止,数据缺失整理完毕;
因为要预测,而且给出的数据属于有监督数据,那么我们使用监督学习;
首先分离训练集和测试集;
先将“最没用”的特征剔除:

adult=adult.drop(['fnlwgt'],axis=1)
adult.info()

<class 'pandas.core.frame.DataFrame'>
Int64Index: 30162 entries, 0 to 32560
Data columns (total 14 columns):
age               30162 non-null int64
workclass         30162 non-null object
education         30162 non-null object
education-num     30162 non-null int64
marital-status    30162 non-null object
occupation        30162 non-null object
relationship      30162 non-null object
race              30162 non-null object
sex               30162 non-null object
capital-gain      30162 non-null int64
capital-loss      30162 non-null int64
hours-per-week    30162 non-null int64
native-country    30162 non-null object
result            30162 non-null object
dtypes: int64(5), object(9)
memory usage: 4.7+ MB

导入分离训练和测试集需要的包:

from sklearn.cross_validation import train_test_split
col_names = ["age", "workclass", "education", "education-num", "marital-status", "occupation", 
             "relationship", "race", "sex", "capital-gain", "capital-loss", "hours-per-week", "native-country", "result"]
数据分离:按照75%的训练集和25%的测试集;random_state随便输入一个数字;
X_train,X_test,y_train,y_test=train_test_split(adult[col_names[1:13]],adult[col_names[13]],test_size=0.25,random_state=33)
# X_train,X_test,y_train,y_test=train_test_split(adult[1:13],adult[13],test_size=0.25,random_state=33)

很多人会写成第二种,但是这样写是错的,可以试试;
查看训练集和测试集情况:

print(X_train.shape)
print(X_test.shape)

(22621, 12)
(7541, 12)

测试集同上,具体来看:

X_train.head()

部分输出:
	workclass	education	education-num	marital-status	occupation	relationship	race	sex	capital-gain	capital-loss	hours-per-week	native-country
20607	Private	Some-college	10	Married-civ-spouse	Craft-repair	Husband	White	Male	0	0	50	United-States
31257	Private	HS-grad	9	Married-civ-spouse	Other-service	Husband	Black	Male	0	0	50	United-States
31892	Private	HS-grad	9	Never-married	Adm-clerical	Not-in-family	White	Female	0	0	45	United-States
20220	Private	HS-grad	9	Divorced	Machine-op-inspct	Unmarried	Black	Female	0	0	40	United-States
24044	Private	Some-college	10	Divorced	Sales	Not-in-family	White	Female	0	0	45	United-States
y_train.head()

20607      >50K
31257     <=50K
31892     <=50K
20220     <=50K
24044      >50K
Name: result, dtype: object

到此为止,训练和测试集就分开了,那么是不是可以直接开始随机森林大法了呢?且慢,最重要的特征尚未处理,至于如何处理,下次见分晓;
第三节终结篇来喽

如果觉得本文写的还不错的伙伴,可以给个关注一起交流进步,如果有在找工作且对阿里感兴趣的伙伴,也可以发简历给我进行内推:
在这里插入图片描述

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
CSDN是一个知名的IT技术社区,提供了大量关于机器学习实例和教程。在CSDN上,有很多作者和开发者分享了他们在机器学习领域的实践经验和项目实例。 首先,CSDN提供了许多基于机器学习的项目实例。这些项目来自不同领域,如自然语言处理、图像识别、推荐系统等。通过这些实例,读者可以了解到如何将机器学习算法应用于实际问题,并学习到项目开发的相关技巧和经验。例如,有一篇实例教程介绍了如何使用深度学习算法实现语音识别,另一篇教程则讲解了如何利用机器学习算法构建一个电影推荐系统。 其次,CSDN上的作者还会分享他们在机器学习领域的研究成果和应用案例。这些文章通常会介绍他们在解决实际问题时所采用的机器学习方法和步骤,以及实验结果和分析。通过阅读这些文章,读者可以了解到当前机器学习研究的最新进展和趋势,并从中获得启发和灵感。 最后,CSDN还提供了一个活跃的机器学习社区,读者可以在这里与其他机器学习爱好者进行交流和讨论。在这个社区里,人们可以分享自己的学习体验和困惑,向其他人请教问题,并获得专业人士的回答和指导。这个社区为机器学习初学者提供了一个学习和进步的平台,同时也为资深的机器学习专家提供了一个交流和合作的机会。 总结来说,CSDN作为一个知名的IT技术社区,为读者提供了丰富的机器学习实例和教程。通过阅读这些实例和教程,读者可以学习到机器学习的基本原理和应用方法,并了解到当前机器学习领域的最新进展。同时,CSDN的机器学习社区也为读者提供了一个与他人交流和讨论的平台,促进学习和成长。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值