Python的几个包:
通过分析不同的因素对研究生录取的影响来预测一个人是否会被录取。
数据来源
数据的格式如下:
row_num | admit | gre | gpa | rank |
---|---|---|---|---|
0 | 0 | 380 | 3.61 | 3 |
1 | 1 | 660 | 3.67 | 3 |
通过pandas.read_csv(“文件路径”)读取数据
import pandas as pd
import statsmodels.api as sm
import pylab as pl
import numpy as np
df = pd.read_csv("./binary.csv")
print df.head()
# 重命名'rank'列,因为dataframe中有个方法名也为'rank'
df.columns = ["admit", "gre", "gpa", "prestige"]
print df.columns
# array([admit, gre, gpa, prestige], dtype=object)
结果:
pandas库提供函数describe来对数据进行统计,其中包括最值,均值,标准差等,计算标准差我们也可以用padans.dataframe.std()来求标准差,我们可以通过padans.dataframe.hist()来画柱状图,通过pylab.show来展示
print df.describe()
print df.std()
print pd.crosstab(df['admit'], df['prestige'], rownames=['admit'])
df.hist()
pl.show()
虚拟变量,也叫哑变量,可用来表示分类变量、非数量因素可能产生的影响。在计量经济学模型,需要经常考虑属性因素的影响。例如,职业、文化程度、季节等属性因素往往很难直接度量它们的大小。只能给出它们的“Yes—D=1”或”No—D=0”,或者它们的程度或等级。为了反映属性因素和提高模型的精度,必须将属性因素“量化”。通过构造0-1型的人工变量来量化属性因素。
pandas提供一个一个分类变量的控制功能,我们可以通过get_dummies来对一列进行虚拟化。本例中将prestige虚拟化实现,以实现量化
#将prestige虚拟化实现,量化
dummy_ranks = pd.get_dummies(df['prestige'],prefix='prestige')
print dummy_ranks.head()
clos_to_keep=['admit','gre','gpa']
#合并虚拟项与原数据得到完成LR的dataframe
data = df[clos_to_keep].join(dummy_ranks.ix[:,'prestige_2':])
print data.head()
#自行添加逻辑回归需要的intercept变量(常数项)
data['intercept']=1.0
在之前我们已经将准备工作做就绪,那么接下来就可以执行逻辑回归了。
在本例中预测admit,使用gre,gpa,以及虚拟变量p2,p3,p4做预测变量。
#指定作为训练变量的列,不含目标列‘admit’
train_cols=data.columns[1:]
#执行逻辑回归
logit = sm.Logit(data['admit'],data[train_cols])
#拟合参数
result = logit.fit()
statasmodels库中提供了许多的机器学习的算法,详情参见:传送门
#拷贝训练集数据
combos = copy.deepcopy(data)
predict_cols = combos.columns[1:]
#设置参数的常量
combos['intercept']=1.0
#进行预测
combos['predict']=result.predict(combos[predict_cols])
tot = 0
hit = 0;
for value in combos.values:
predict = value[-1]
admit = int(value[0])
if predict >=0.5:
tot+=1
if admit == 1:
hit+=1
print 'Total: %d ,Hit: %d ,Precision: %.2f'%(tot,hit,100.0*hit/tot)
通过result.summary()方法查看相关信息。
print result.summary()
# 查看每个系数的置信区间
print result.conf_int()
# 0 1
# gre 0.000120 0.004409
# gpa 0.153684 1.454391
# prestige_2 -1.295751 -0.055135
# prestige_3 -2.016992 -0.663416
# prestige_4 -2.370399 -0.732529
# intercept -6.224242 -1.755716
Python库中几乎包含了常见机器学习中我们需要做的所有操作,在训练机器学习模型的时候我们只用学会如何使用它就好。