泰坦尼克数据挖掘比赛是kaggle上的新手入门赛,作为一个基础还没打好的菜鸡强行敲了一波代码,但是大部分还是跟着别人的思路,看着别人的代码写的。因此代码就不放了,放了跟搬运没啥区别。单纯总结一下学习感悟吧。
做数据挖掘的第一步就是读取数据之后进行分析和预处理。所要用到的python 库有pandas,numpy,matplotlib,seaborn…
1.读取数据之后先统计一下缺失值情况。
data=pd.read_csv('训练集文件路径.csv')
data.head()
#统计缺失值
data.isnul().sum()
#展示数据
data.describe()
2.获取数据之后要进行仔细的分析与理解,才能进行后面的建模。
为了更好地理解数据,必须掌握数据的可视化的操作。
3.对于缺失值我们必须进行填充,下面的例子是我使用sklearn的randmforest来拟合缺失数据
#用sklearn中的randomforest来拟合缺失的年龄数据。
from sklearn.ensemble import RandomForestRegressor
### 使用 RandomForestClassifier 填补缺失的年龄属性
def set_missing_ages(df):
# 把已有的数值型特征取出来丢进Random Forest Regressor中
age_df = df[['Age','Fare', 'Parch', 'SibSp', 'Pclass']]
# 乘客分成已知年龄和未知年龄两部分
known_age = age_df[age_df.Age.notnull()].as_matrix()
unknown_age = age_df[age_df.Age.isnull()].as_matrix()
# y即目标年龄
y = known_age[:, 0]
# X即特征属性值
X = known_age[:, 1:]
# fit到RandomForestRegressor之中
rfr = RandomForestRegressor(random_state=0, n_estimators=2000, n_jobs=-1)
rfr.fit(X, y)
# 用得到的模型进行未知年龄结果预测
predictedAges = rfr.predict(unknown_age[:, 1::])
# 用得到的预测结果填补原缺失数据
df.loc[ (df.Age.isnull()), 'Age' ] = predictedAges
return df, rfr
def set_Cabin_type(df):
df.loc[ (df.Cabin.notnull()), 'Cabin' ] = "Yes"
df.loc[ (df.Cabin.isnull()), 'Cabin' ] = "No"
return df
df_train, rfr = set_missing_ages(df_train)
df_train = set_Cabin_type(df_train)
``
4.对每个特征进行单独分析,充分理解,看其与我们要预测的特征的关系,对于强特,很方便,对于弱特征,需要进行特征挖掘,特征组合,来提高预测效果,组合出强特。要不然就要舍掉影响很小的特征,进行约简。
5.单独分析之后就要在特征之间找相关性,进行特征工程,数据清洗。
在找特征之间的相关性的时候可以使用热度图。
6.要学会合并特征,比如在这个比赛里将客人的父母数量,兄弟姐妹数量合起来为家庭总人数的特征。
7.去掉不必要的特征,因为这些特征要么毫无意义,要么充满随机性。
8.利用机器学习算法来建模。
from sklearn.linear_model import LogisticRegression #logistic回归
from sklearn import svm #支持向量机
from sklearn.ensemble import RandomForestClassifier #随机森林
from sklearn.neighbors import KNeighborsClassifier #KNN
from sklearn.naive_bayes import GaussianNB #朴素贝叶斯
from sklearn.tree import DecisionTreeClassifier #决策树
from sklearn.model_selection import train_test_split #切分数据集
from sklearn import metrics #精度测量
from sklearn.metrics import confusion_matrix #混淆矩阵
9.另外很重要的一点就是要进行交叉验证,这个的重要性无需多言。
10.注意用正则化防止过拟合的问题。
11.可以多做几组特征,多做几个模型,来进行模型融合,上分!
12.调参很重要,算法理解很重要,要实现底层。
13.也不需要太执着于特征挖掘,像我们中国移动消费者人群画像比赛里就一直执着于特征挖掘,最后发现特征选取的都差不多,差距在参数和其他的技巧上。