kaggle机器学习教程(Python实现)

kaggle上有个简单的机器学习教程,用的是Python,这篇文章尝试把其中的主要脉络梳理一下,如果你想要学习,还是推荐到网站上过一遍。

数据的导入和导出

kaggle的数据集大都是以csv格式的文件存储的,你上传最终的结果时也要求以csv格式呈现,因此下面简单介绍下数据集的导入和导出。这个教程是以 预测Titanic幸存人数为例进行说明。

数据读入

使用pandas可以将csv文件读入DataFrame格式的文件

import pandas
train = pd.read_csv('train.csv')
train.describe() #数据描述,总结所有样本某一特征的均值,最大最小,平均值等。
train.shape #查看数据的维数
数据的导出
# 导出的csv文件中包含两列,乘客的Id和是否幸存
PassengerId =np.array(test['PassengerId']).astype(int)
my_solution = pd.DataFrame(my_prediction, PassengerId, columns = ["Survived"])

# 写入硬盘,以my_solution_one.csv文件名存储
my_solution.to_csv("my_solution_one.csv", index_label = ["PassengerId"])

数据处理

类别计数

如果想对某一特征有多少个类别计数,比如Survived这一列,1表示是,0表示否

train['Survived'].value_counts()#注:也可以写作 train.Survived.value_counts()
Out[1]: 
0    549 #死亡549人
1    342 #幸存342人

也可以对数据归一化显示,只需要在value_counts的括号内加 normalize=True 就可以了:

In [3]: train['Survived'].value_counts(normalize = True)
Out[3]: 
0    0.616162
1    0.383838
Name: Survived, dtype: float64
限制条件下的类别计数

上面的方法只是统计出了所有乘客的幸存与死亡人数,那么如果只想统计女性乘客中的死亡与幸存人数呢?

In [5]: train["Survived"][train.Sex == 'female'].value_counts() #只统计女乘客中的幸存人数与死亡人数
Out[5]: 
1    233
0     81
Name: Survived, dtype: int64

同样如果想得到比例只需在value_counts括号内加入normalize = True即可。

在数据集加入新的特征

我们考虑儿童是不是生存率更高呢?因此在训练集中加入一维特征 Child:

train["Child"] = float('NaN')
train.Child[train.Age < 18] = 1 #年龄小于18岁符合Child标准
train.Child[train.Age >= 18] = 0 

print(train.Survived[train.Child == 1].value_counts(normalize = True))# 查看儿童的生存率
数据清洗

在数据集中的Sex这一维特征中是字符型的 male 和 female 为了后续的处理方便,我们将 male 置为 0,female为1:

train["Sex"][train["Sex"] == "male"] = 0
train.Sex[train.Sex == 'female'] = 1

对于某些特征中数据的缺失,可以根据情况加以处理:

train["Embarked"] = train.Embarked.fillna('S')
#将Embarked项中所有为NA的填充为'S',在该项特征中,'S'占比最多

#将字符特征转换为数字特征
train["Embarked"][train["Embarked"] == "S"] = 0
train["Embarked"][train["Embarked"] == "C"] = 1
train["Embarked"][train["Embarked"] == "Q"] = 2

#将Fare项中所有NA值填充为Fare的中位数
train.Fare = train.Fare.fillna(train.Fare.median())

注:当对test数据集进行预测时,也需要做相应的数据预处理操作。

将DataFrame转换成array

dataFrame格式的数据文件易于对数据进行一些预处理,处理完之后需要转换成array格式便于使用模型进行建模预测等。

target = train["Survived"].values #label
features_one = train[["Pclass", "Sex", "Age", "Fare"]].values #features

对数据建模分析

这里使用工具箱中的scikitlearn的决策树和随机森林进行数据预测

from sklearn import tree
my_tree_one = tree.DecisionTreeClassifier()
my_tree_one = my_tree_one.fit(features_one, target)
#这样就可以使用predict方法进行预测了。
print(my_tree_one.feature_importances_) #显示各特征的重要性
print(my_tree_one.score(features_one, target)) #显示正确率(训练集)

# 对测试数据进行预处理
test.Fare = test.Fare.fillna(test.Fare.median())
test_features = test[["Pclass", "Sex", "Age", "Fare"]].values

# 使用决策树进行预测
my_prediction = my_tree_one.predict(test_features)

在应用决策树时,为了防止过拟合可以对某些参数进行自定义

features_two
features_two = train[["Pclass","Age","Sex","Fare", "SibSp", "Parch", "Embarked"]].values

max_depth = 10 #树的深度小于10
min_samples_split = 5 #如果样本数小于5不再进行划分
my_tree_two = tree.DecisionTreeClassifier(max_depth = max_depth, min_samples_split = min_samples_split, random_state = 1)
my_tree_two = my_tree_two.fit(features_two, target)

#Print the score of the new decison tree
print(my_tree_two.score(features_two, target))

甚至可以在已有的特征中组合出新的特征

train_two = train
train_two['family_size'] = train_two.SibSp + train_two.Parch + 1

# Create a new decision tree my_tree_three
features_three = train_two[["Pclass", "Sex", "Age", "Fare", "SibSp", "Parch", "family_size"]].values
my_tree_three = tree.DecisionTreeClassifier()
my_tree_three = my_tree_three.fit(features_three, target)
print(my_tree_three.score(features_three, target))

随机森林也是应对决策树过拟合的一种方法:

from sklearn.ensemble import RandomForestClassifier

features_forest = train[["Pclass", "Age", "Sex", "Fare","SibSp", "Parch", "Embarked"]].values

#Building the Forest: my_forest
n_estimators = 100 #决策树的数量
forest = RandomForestClassifier(max_depth = 10, min_samples_split=2, n_estimators= n_estimators, random_state = 1)
my_forest = forest.fit(features_forest, target)

print(my_forest.score(features_forest, target))

test_features = test[["Pclass", "Age", "Sex", "Fare","SibSp", "Parch", "Embarked"]].values
pred_forest = my_forest.predict(test_features)

小结

可以看出使用pandas可以方便的进行数据的导入和导出操作,简便的对数据进行预处理,包括对缺失值的处理,增加或组合某些特征等。在使用决策树时可以尝试不同的特征组合,有些特征比较重要,有些则没有什么作用。这篇简易的教程主要作用是提供了一个使用pandas进行数据处理分析的实例。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Kaggle房价预测模型是一个基于Python机器学习项目,旨在通过对房屋特征数据的分析和建模,预测房屋的销售价格。该项目涉及数据清洗、特征工程、模型选择和调优等多个方面,需要熟练掌握Python编程和机器学习算法。通过参与该项目,可以提高数据分析和建模能力,同时也可以与全球的数据科学家进行交流和竞争。 ### 回答2: Kaggle是全球最大的数据科学竞赛平台,拥有来自全球各地的数据科学家和机器学习专家,为广大数据爱好者提供了一个非常好的学习交流平台。Kaggle房价预测模型Python是一个非常实用的项目,其主要目的是利用机器学习模型对房价进行预测。 从数据处理和建模的角度来看,Kaggle房价预测模型Python是一个非常好的练习项目,它可以帮助我们掌握处理数据的技能、构建机器学习算法的技能,以及利用Python来进行数据挖掘的技能。此外,通过这个项目可以深入了解机器学习的一些基本概念和原理,例如数据预处理、特征工程、模型选择、模型评估等。 在具体实现Kaggle房价预测模型Python的过程中,我们需要做以下几步: 1. 数据预处理。我们需要读取数据集,理解数据中的各个字段含义,对数据进行初步处理,例如去除异常值、填补缺失值等。 2. 特征工程。特征工程是机器学习中非常重要的一环,其目的是基于原始数据构建新的特征来提高机器学习模型的性能。在房价预测模型中,特征可以包括房屋面积、附近学校数量、交通便利程度等等。 3. 模型选择和训练。为了提高预测的准确性,我们需要选择合适的模型和算法。在机器学习中有很多模型可以选择,例如线性回归、随机森林、GBDT等。我们需要将数据划分为训练集和测试集来进行训练和评估模型的性能。 4. 模型调优。模型调优是为了提高模型的预测能力,可以通过调整模型参数、选择不同的特征、使用交叉验证等方法来实现。 5. 预测和提交结果。当模型训练好之后,我们可以利用该模型来对新的数据进行预测,并将结果上传到Kaggle平台上进行评估。我们需要根据评测结果不断地调整模型和算法,提高模型的准确度。 总之,Kaggle房价预测模型Python是一个非常实用和有挑战性的机器学习项目,它可以帮助我们提高数据处理和机器学习算法的能力,也可以提高我们理解机器学习的深度和广度。通过这个项目的实践,我们可以更好地掌握机器学习的基本概念和技能,为以后的数据科学工作打下更坚实的基础。 ### 回答3: Kaggle房价预测是一个经典的机器学习问题,也是学习和掌握机器学习的一个很好的案例。在这个问题中,我们需要根据已有的房屋特征(如房屋面积、房间数量、地理位置等)预测相应的房价。使用Python语言及相关工具对数据进行探索并建立预测模型是本问题的主要内容。 首先,我们需要使用Python数据分析库Pandas导入并探索数据。这包括了特征的可视化、缺失值的识别及数据类型的转换等操作。接着,我们需要特征工程,创建新的特征,修正问题数据和缺失值。在此基础上,选择一些可行的算法并对模型进行训练和调整参数。这个过程包括的算法有线性回归、决策树、随机森林、支持向量机和神经网络等。 训练后,我们需要将模型应用于测试集中的数据并计算预测效果,可以使用Mean Squared Error等评价标准。我们可以使用Python数据可视化工具Matplotlib或Seaborn来展示预测效果。 最后,我们可以将模型应用于新的数据集以进行实际的房价预测。这个过程与之前的过程基本相同,只不过需要注意数据的质量和特征。一些可能对房价有影响的新特征,例如城市发展指数和经济形势等,也可以被加入模型来提升准确度。 总的来说,Kaggle房价预测模型是一个非常实际的机器学习问题,需要结合丰富的数据探索和建模技术。在应用中,需要根据实际情况对模型的算法和特征进行改进和优化。这是一个非常有趣的机器学习题目,同时也是学习机器学习Python编程的好案例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值