Python机器学习:泰坦尼克号获救预测一
2018-06-18 01:40:30来源:未知 阅读 ()
1 #coding: utf-8 2 import pandas 3 titanic = pandas.read_csv('train.csv')
1 #对于缺失的数据进行补充 median 填充中位数 2 titanic['Age'] = titanic['Age'].fillna(titanic['Age'].median())
1 print titanic['Sex'].unique() 2 titanic.loc[titanic['Sex'] == 'male','Sex'] = 0 3 titanic.loc[titanic['Sex'] == 'female','Sex'] = 1 4 5 print titanic['Embarked'].unique() 6 titanic['Embarked'] = titanic['Embarked'].fillna('S') 7 titanic.loc[titanic['Embarked'] == 'S','Embarked'] = 0 8 titanic.loc[titanic['Embarked'] == 'C','Embarked'] = 1 9 titanic.loc[titanic['Embarked'] == 'Q','Embarked'] = 2
1 from sklearn.linear_model import LinearRegression #分类算法 线性回归 2 from sklearn.cross_validation import KFold #交叉验证库,将测试集进行切分验证取平均值
1 predictors = ['Pclass','Sex','Age','SibSp','Parch','Fare','Embarked'] #用到的特征 2 alg = LinearRegression() #线性回归模型实例化对象 3 kf = KFold(titanic.shape[0],n_folds=3,random_state=1) #将m个平均分成3份进行交叉验证
1 predictions = [] 2 #for循环: 训练集、测试集、交叉验证 3 for train, test in kf: 4 #print train 5 #print test 6 train_predictors = (titanic[predictors].iloc[train,:]) #将predictors作为测试特征 7 #print train_predictors 8 train_target = titanic['Survived'].iloc[train] 9 #print train_target 10 alg.fit(train_predictors,train_target) #构建线性模型 样本的x(训练数据) 样本的y(标签值) 11 test_prediction = alg.predict(titanic[predictors].iloc[test,:]) #预测结果值 12 predictions.append(test_prediction)
1 import numpy as np 2 #使用线性回归得到的结果是在区间【0,1】上的某个值,需要将该值转换成0或1 3 predictions = np.concatenate(predictions, axis=0) 4 predictions[predictions >.5] = 1 5 predictions[predictions <=.5] = 0 6 accury = sum(predictions[predictions == titanic['Survived']]) / len(predictions) #测试准确率 进行模型评估 7 print accury #精度值
1 from sklearn.linear_model import LogisticRegression #逻辑回归 2 from sklearn import cross_validation 3 alg = LogisticRegression(random_state=1) 4 scores = cross_validation.cross_val_score(alg, titanic[predictors],titanic['Survived'],cv=3) 5 print scores.mean()
1 from sklearn.ensemble import RandomForestClassifier 2 from sklearn import cross_validation 3 predictions = ['Pclass','Sex','Age','SibSp','Parch','Fare','Embarked'] 4 # Initialize our algorithm with the default paramters 5 # random_state = 1 表示此处代码多运行几次得到的随机值都是一样的,如果不设置,两次执行的随机值是不一样的 6 # n_estimators 指定有多少颗决策树,树的分裂的条件是: 7 # min_samples_split 代表样本不停的分裂,某一个节点上的样本如果只有2个了 ,就不再继续分裂了 8 # min_samples_leaf 是控制叶子节点的最小个数 9 alg = RandomForestClassifier(random_state=1,n_estimators=100,min_samples_split=4,min_samples_leaf=2) 10 #进行交叉验证 11 kf = cross_validation.KFold(titanic.shape[0],n_folds=3,random_state=1) 12 scores = cross_validation.cross_val_score(alg,titanic[predictors],titanic['Survived'],cv=kf) 13 print scores.mean()
1 # ## 关于特征提取问题 (非常关键) 2 # - 尽可能多的提取特征 3 # - 看不同特征的效果 4 # - 特征提取是数据挖掘里很- 要的一部分 5 # - 以上使用的特征都是数据里已经有的了,在真实的数据挖掘里我们常常没有合适的特征,需要我们自己取提取 6 ① 把多个特征组合成一个特征 7 titanic['Familysize'] = titanic['SibSp'] + titanic['Parch'] #家庭总共多少人 8 titanic['NameLength'] = titanic['Name'].apply(lambda x: len(x)) #名字的长度 9 import re 10 11 def get_title(name): 12 title_reserch = re.search('([A-Za-z]+)\.',name) 13 if title_reserch: 14 return title_reserch.group(1) 15 return "" 16 titles = titanic['Name'].apply(get_title) 17 #print pandas.value_counts(titles) 18 19 #将称号转换成数值表示 20 title_mapping = {"Mr":1,"Miss":2,"Mrs":3,"Master":4,"Dr":5,"Rev":6,"Col":7,"Major":8,"Mlle":9,"Countess":10,"Ms":11,"Lady":12,"Jonkheer":13,"Don":14,"Mme":15,"Capt":16,"Sir":17} 21 for k,v in title_mapping.items(): 22 titles[titles==k] = v 23 #print (pandas.value_counts(titles)) 24 titanic["titles"] = titles #添加title特征
1 # 进行特征选择 2 # 特征重要性分析 3 # 分析 不同特征对 最终结果的影响 4 # 例如 衡量age列的重要程度时,什么也不干,得到一个错误率error1, 5 # 加入一些噪音数据,替换原来的值(注意,此时其他列的数据不变),又得到一个一个错误率error2 6 # 两个错误率的差值 可以体现这一个特征的重要性 7 import numpy as np 8 from sklearn.feature_selection import SelectKBest,f_classif#引入feature_selection看每一个特征的重要程度 9 import matplotlib.pyplot as plt 10 11 predictors = ['Pclass','Sex','Age','SibSp','Parch','Fare','Embarked','Familysize','NameLength','titles'] 12 selector = SelectKBest(f_classif,k=5) 13 selector.fit(titanic[predictors],titanic['Survived']) 14 scores = -np.log10(selector.pvalues_)
1 plt.bar(range(len(predictors)),scores) 2 plt.xticks(range(len(predictors)),predictors,rotation='vertical') 3 plt.show()
1 # 在竞赛中常用的耍赖的办法:集成多种算法,取最后每种算法的平均值,来减少过拟合 2 from sklearn.ensemble import GradientBoostingClassifier 3 import numpy as np 4 # GradientBoostingClassifier也是一种随机森林的算法,可以集成多个弱分类器,然后变成强分类器 5 algorithas = [ 6 [GradientBoostingClassifier(random_state=1,n_estimators=25,max_depth=3),['Pclass','Sex','Age','SibSp','Parch','Fare','Embarked','Familysize','NameLength','titles']], 7 [LogisticRegression(random_state=1),['Pclass','Sex','Age','SibSp','Parch','Fare','Embarked','Familysize','NameLength','titles']] 8 ] 9 kf = KFold(titanic.shape[0],n_folds=3,random_state=1) 10 predictions = [] 11 for train, test in kf: 12 train_target = titanic['Survived'].iloc[train] 13 full_test_predictions = [] 14 for alg,predictors in algorithas: 15 alg.fit(titanic[predictors].iloc[train,:],train_target) 16 test_prediction = alg.predict_proba(titanic[predictors].iloc[test,:].astype(float))[:,1] 17 full_test_predictions.append(test_prediction) 18 test_predictions = (full_test_predictions[0] + full_test_predictions[1]) / 2 19 test_predictions[test_predictions >.5] = 1 20 test_predictions[test_predictions <=.5] = 0 21 predictions.append(test_predictions) 22 predictions = np.concatenate(predictions,axis=0) 23 accury = sum(predictions[predictions == titanic['Survived']]) / len(predictions)#测试准确率 24 print accury
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash