1. 提出問題:
- 明確是分類問題還是回歸問題
2. 理解數據:
2.1 采集數據
- sklearn.datasets中有練習數據(數據要有代表性,數據量要合適)
2.2 導入數據
- pd.csv...
2.3 查看數據集信息
- data.shape查看數據形狀;.shape[0]查看行數;.shape[1]查看列數
-
df.head()查看前幾行;
-
df.describe()查看數值數據的描述統計信息;
-
df.info()根據行數查看數據是否有缺失值,數據類型是否合適
-
了解各個字段的含義,目標和特征分別是哪個字段;也可通過可視化了解數據的分布
3. 數據清洗
3.1 數據預處理
包括缺失值處理、重復值處理、數據類型的轉換、字符串數據的規整
-
缺失值處理(標簽數據無需填充缺失):
-
數值數據:用平均值取代: data[A].fillna(data[A].mean())
-
分類數據:data[A].value_counts();data[A].fillna("占比最多的類別");data[A].fillna("U")缺失比較多時,填充代表未知的字符串
-
使用模型預測缺失值,例如:K-NN
-
-
數據歸一化/標准化:
-
模型具有伸縮可變性,如SVM,最好進行標准化,避免模型參數受極值影響;伸縮不變模型,如邏輯回歸,最好也進行標准化,可以加快訓練速度
-
歸一化/標准化常見兩種方法:
- min-max,化為[0,1]:(x-min(x))/(max(x)-min(x))/preprocessing.MinMaxScaler;適合分別在有限范圍內的數據,數值較集中,但min/max不穩定會影響結果
- Z-core,化為均值為0,方差為1:(x-mean(x))/std(x)/sklearn.preprocessing.scale(),適合最大/最小值未知,或者有超出取值范圍的離散值
-
3.2 特征提取(特征工程.1)(參考泰坦尼克項目)
-
數值型數據處理:一般可直接使用,或通過運算轉化為新的特征
- 通過家庭人數可划分大小家庭:df.家庭人數=df.A+df.B+1(自己);df.小家庭=df.家庭人數.map(lambda s : 1 if 2 <= s <= 4 else 0)
-
分類型數據處理:
-
兩個類別:性別數據分別填充為1、0:df.A=df.A.map({"male":1;"female":0})
-
超過兩個類別:one-hot編碼,data'=pd.get_dummies(df.A , prefix='前綴' );pd.concat([data,data'],axis=1)
-
字符串型-姓名:每一個姓名中都包含了稱謂,利用split函數將稱謂提取出來;.strip用於移除空格;將稱謂進行歸類,定義對應字典,利用map函數替換;進行one_hot編碼
-
字符串型-客艙號:a[n]可以取到字符串數據 第“n”個字符;提取之后進行one_hot編碼
-
-
時間序列數據,一段時間定期收集的數據-可轉成年月日
3.3 特征選擇(特征工程.2)
- 計算各個特征和標簽的相關性:df '=pd.corr()
-
查看標簽對應的相關系數: df '.標簽.sort_values(ascending =False)
-
根據相關系數的大小選擇特征列做為模型輸入
4. 構建模型:
4.1 建立訓練數據集和測試數據集
-
選取訓練數據和測試數據的特征和標簽:.loc選取特征列和標簽列;train_test_spilt 划分,通常80%為訓練數據集
-
.shape查看划分結果
4.2. 選擇機器學習算法:
-
導入算法
-
邏輯回歸(logisic regression)
-
隨機森林(Random Forests Model)
-
支持向量機(Support Vector Machines)
-
Gradient Boosting Classifier
-
K-nearest neighbors
-
Gaussian Naive Bayes
-
數據降維:PCA,Isomap
-
數據分類:SVC,K-Means
-
線性回歸:LinearRegression
-
-
創建模型
- model=LinearRegression()
-
訓練模型
- model.fit(train_X , train_y )
5. 評估模型
-
model.score(test_X , test_y ),不同的模型指標不一樣,分類模型評估准確率
-
metrics.confusion_matrix:混淆矩陣
-
homogeneity_score:同質性,每個群集只包含單個類的成員;[0,1],1表示完全同質。
-
completeness_score:完整性,給定類的所有成員都分配給同一個群集。[0,1],1表示完全完整。
-
v_measure_score:同質性和完整性的調和平均值
-
adjusted_mutual_info_score:蘭德系數ARI,取值范圍[-1,1],值越大,表示與聚類結果與真實越吻合,體現的是兩個數據分布的吻合程度
-
adjusted_mutual_info_score:互信息AMI,取值[-1,1],值越大,與真實情況越吻合。
-
fowlkes_mallows_score:精確率和召回率的幾何平均值,[0,1],越大,越相似。
-
silhouette_score:輪廓系數,[-1,1]同類別越近,不同類別越遠,系數越大。
-
calinski_harabaz_score:類內部協方差越小,類之間協方差越大,該數值越大,聚類效果越好。
6. 方案實施
- model.predict(pred_X),得到預測結果
7.報告撰寫
- 歡迎關注我的公眾號,了解一個學設計卻做了運營最后成了數據分析師並努力成為大數據工程師的女程序員的成長之路。
