Data Science Pipelines | 特徵工程中的管道

暫定為記錄各式數據科學項目、Kaggle競賽里面常用、有用的代碼片段、API、神操作等,通常是Numpy、Pandas、Matplotlib、Seaborn等相關,通常來說,項目基本步驟可以分為EDA、特徵工程以及調參。

基本流程

  1. 以一個Kaggle上的House Price為案例,機器學習流程分成兩個大步驟:即
    EDA與特徵工程(只使用Pandas, StatsModel,scipy,numpy, seaborn等庫)

    • 輸入: 原始Train, Test 數據集,將原始Train和Test 合併成一個數據集combined

    • 處理: Pandas Pipe

      根據各種可能和各種特徵工程方法定義各種函數(輸入combined, 輸入pre_combined)
      用PandasPipe 將這個函數像搭積木一樣連在一起。用列表按序存放這些函數)
      這個列表就是,1. 基本的填充空值, 2. 轉換數據類型, 3. 空白函數(為了對齊美觀而以,啥事不做),4. log 轉換,類別數據啞元處理, 5. 導出到hdf5文件, 6.檢查R2值利用各種排列組合,或者各種參數組合,可以產生豐富的pipes,每一個pipes都可以產生一個預處理過的文件。

    • 輸出:某文件夾下的N個預處理過的hdf5文件。針對各種特徵工程的排列組合,或者是Kaggle上面的各種新奇的特徵工程方法。

  2. 機器學習階段(訓練和產生模型,目標是盡可能獲得盡可能低的RMSE值(針對訓練數據),同時要具有範化的能力(針對測試數據))

    • 第一步,建立基準,篩選出最好的一個(幾個)預處理文件(隨機數設成固定值)
    • 第二步,針對篩選出來的預處理文件,進行調參。找到最合適的幾個算法(通常是RMSE值最低,且不同Kernel)(隨機數設成固定值)
    • 第三步,用調好的參數來預處理文件中的Traing數據的做average 和stacking
    • 第四部,生成csv文件,提交到Kaggle 看看得分如何。

準備階段與NoteBook Head

過濾warning:有句話說的好,在計算機科學裡,我們只在意錯誤不在意warning

 1
2
 import
warnings.filterwarnings(

工作目錄切換到當前python文件所在目錄

1
2
 import
os.chdir(os.path.dirname(os.path.abspath(__file__)))

Notebook交互輸出所有結果

1
2
 from
InteractiveShell.ast_node_interactivity=

結果如下
Screen Shot 2018-01-12 at 15.27.58

以上可以通過設置固定下來,方法如下:

Screen Shot 2018-02-05 at 14.51.01

Screen Shot 2018-02-05 at 14.50.29


一般對train以及test做一個concat,並記錄train的條數ntrain

 1
2
3
4
5
6
7
8
9
10
 train = pd.read_csv(
test = pd.read_csv(

combined = pd.concat([train,test],axis =
ntrain = train.shape[
Y_train = train[
X_train = train.drop([
print
print
print

EDA相關

1D Scatter

 1
2
3
4
5
6
 nca = NCA(num_dims=
nca.fit(xx_t, yy)
xxxxx = nca.transform(xx)
zeros=np.zeros_like(xxxxx)
plt.scatter(xxxxx, zeros+
plt.show()

myplot


缺失值分析

1
2
3
4
 cols_missing_value = combined.isnull().
cols_missing_value = cols_missing_value[cols_missing_value>
print
cols_missing_value.sort_values(ascending=

有缺失- 需要填充或者刪除,通常用均值或者中指,或者用人工分析(人工分析是提分關鍵)


將若干個Dataframe畫在同一個圖裡面相同坐標

1
2
3
4
5
6
7
8
9
 fig, ax = plt.subplots()
# desc, group 是一個Dataframe groupby desc 出的結果
for
group.plot(x = group.index, y=
ax.set_xlabel(
ax.set_ylabel(
ax.xaxis.label.set_size(
ax.yaxis.label.set_size(
ax.legend(fontsize =

結果如下圖,


畫a*b的子圖

1
2
3
4
5
6
7
8
 fig, axes = plt.subplots(
# desc, group 是一個Dataframe groupby desc 出的結果也就是下面的Energy_sources
for
group.plot(x = group.index, y=
ax.set_xlabel(
ax.set_ylabel(
ax.xaxis.label.set_size(
ax.yaxis.label.set_size(


畫柱狀圖

Screen Shot 2018-01-12 at 15.19.32

 1
2
3
4
5
6
7
8
9
10
 fig = plt.figure(figsize = (
# CO2_per_source的來源與結構如上圖
x_label =
x_tick = np.arange(
plt.bar(x_tick, CO2_per_source, align =
fig.suptitle(
plt.xticks(x_tick, x_label, rotation =
plt.yticks(fontsize =
plt.xlabel(
plt.show()


重疊圖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 from
decomposition = seasonal_decompose(mte)

trend = decomposition.trend
seasonal = decomposition.seasonal
residual = decomposition.resid

plt.subplot(
plt.plot(mte, label=
plt.legend(loc=
plt.subplot(
plt.plot(trend, label=
plt.legend(loc=
plt.subplot(
plt.plot(seasonal,label=
plt.legend(loc=
plt.subplot(
plt.plot(residual, label=
plt.legend(loc=
plt.tight_layout()


環形圖

1
2
3
4
5
6
7
8
9
10
11
12
 plt.subplots(figsize=(
data=response[
dataset=[]
for
dataset.extend(i)
pd.Series(dataset).value_counts().plot.pie(autopct=
plt.title(
my_circle=plt.Circle( (
p=plt.gcf()
p.gca().add_artist(my_circle)
plt.ylabel(
plt.show()


餅狀圖

1
2
3
4
5
6
7
8
 f,ax=plt.subplots(
response[
ax[
ax[
response[
ax[
ax[
plt.show()


維恩圖

1
2
3
4
5
6
7
 f,ax=plt.subplots(
pd.Series([python.shape[
ax[
venn2(subsets = (python.shape[
plt.title(
plt.show()

Seaborn

count plot

 1
2
3
 plt.subplots(figsize=(
sns.countplot(y=response[
plt.show()


利用squarify畫樹形圖

1
2
3
4
5
6
7
 import
tree=response[
squarify.plot(sizes=tree[
plt.rcParams.update({
fig=plt.gcf()
fig.set_size_inches(
plt.show()


sns畫分佈圖

1
2
3
4
5
 plt.subplots(figsize=(
salary=salary[salary[
sns.distplot(salary[
plt.title(
plt.show()


sns子圖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 f,ax=plt.subplots(
sal_coun=salary.groupby(
sns.barplot(
ax[
ax[
ax[
max_coun=salary.groupby(
max_coun=max_coun[max_coun.index.isin(resp_coun.index)]
max_coun.sort_values(by=
ax[
ax[
ax[
ax[
plt.subplots_adjust(wspace=
plt.show()


seaborn箱型圖

1
2
3
4
 plt.subplots(figsize=(
sns.boxplot(y=
plt.ylabel(
plt.show()


seaborn count_plot

 1
2
3
4
5
6
7
8
9
 f,ax=plt.subplots(
sns.countplot(y=response[
ax[
ax[
sns.countplot(y=response[
ax[
ax[
plt.subplots_adjust(wspace=
plt.show()


seaborn 圖中添加文字

1
2
3
4
5
6
7
8
 sal_job=salary.groupby(
ax=sns.barplot(sal_job.Salary,sal_job.index,palette=sns.color_palette(
plt.title(
for
ax.text(
fig=plt.gcf()
fig.set_size_inches(
plt.show()


詞云

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 from
import
from
free=pd.read_csv(
stop_words=
stop_words.update(
motivation=free[
motivate=[]
for
motivate.extend(i)
motivate=pd.Series(motivate)
motiv

Leave a Comment

Your email address will not be published.