基于2017年亞太模組化比賽A題資料的多種分類模型評價
- 目錄
-
- 問題重述
- 附件一原始資料
- 1 資料預處理
- 2 問題分析
- 3 多元線性模型的實作
- 4 K-MEANS 聚類(無監督聚類)
- 5.利用SPSS 神經網絡預測分類
- 6.利用SPSS 決策樹聚類
- 總結一下
目錄
問題重述
根據附件一中的資料分析給出的名額與睡眠品質的關系,如果一項或多項名額與睡眠品質沒有相關性,則找出并删除。問題大意:建立一種模型,讓你來分析以下各項名額對睡眠品質的影響。
附件一原始資料
Number Age Sex Source SQ Reliability Psychoticism Nervousness Character
0 1 28 1 Outpatient 1 36.62 15.00 63.91 50.34
1 2 65 0 Outpatient 2 57.24 44.20 61.17 37.70
2 3 63 0 Outpatient 1 48.45 40.99 41.73 35.35
3 4 30 0 Outpatient 3 52.42 40.48 67.90 28.41
4 5 67 0 Outpatient 1 54.31 37.79 52.53 42.39
… … … … … … … … … …
6344 6345 17 0 Outpatient 1 41.97 35.31 57.43 69.17
6345 6346 49 1 Outpatient 2 48.12 51.16 51.62 39.01
6346 6347 68 0 Outpatient 1 54.31 40.99 43.89 44.74
6347 6348 41 0 Outpatient 3 45.74 54.30 75.59 31.26
6348 6349 34 1 Outpatient 2 24.22 66.96 79.22 35.63
6349 rows × 9 columns
import pandas as pd #引入pandas 庫
#讀取資料集
data = pd.read_csv('Annex I.csv')#讀取檔案
data.describe()#運作結果如下

資料來源:2017亞太模組化賽題A
1 資料預處理
原始附件一中性别為男女字元串格式,這裡統一把男性定為1,女性定為0。 對于資料的預處理,首先剔除異常值。
異常值
指的是樣本中的個别值,其數值明顯偏離其餘的資料。異常值通常也稱為離群點,是以異常值分析也叫做離群點分析。
異常值分析通常有以下幾種:
(1)簡單統計量分析
最常用的統計量是最大值和最小值,用來判斷這個變量的取值是否超出了合理的範圍。
(2)3σ原則
如果資料服從正态分布,在3σ原則下,異常值被定義為一組測定值中與平均值的偏差超過3倍标準差的值。在正态分布的假設下,距離平均值3σ之外的值出現的機率為,屬于極個别的小機率事件
(3)箱型圖分析
箱型圖提供了識别異常值的一個标準:(直接上圖)
這裡我使用箱圖來剔除,代碼如下:
import pandas as pd
import matplotlib.pyplot as plt
# 讀取附件一資料集
data = pd.read_csv('Annex I.csv')
plt.figure(figsize=(10,8))
# 設定圖形的顯示風格
plt.style.use('ggplot')
# 設定中文和負号正常顯示
plt.rcParams['font.sans-serif'] = [u'SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 繪圖:附件一箱線圖
plt.boxplot(x = data.Reliability, # 指定繪圖資料
patch_artist = True, # 要求用自定義顔色填充盒形圖,預設白色填充
showmeans = True, # 以點的形式顯示均值
widths = 0.2,
boxprops = {'color':'black','facecolor':'#9999ff'}, # 設定箱體屬性,填充色和邊框色
flierprops = {'marker':'o','markerfacecolor':'red','color':'black'}, # 設定異常值屬性,點的形狀、填充色和邊框色
meanprops = {'marker':'D','markerfacecolor':'indianred'}, # 設定均值點的屬性,點的形狀、填充色
medianprops = {'linestyle':'--','color':'orange'}) # 設定中位數線的屬性,線的類型和顔色
# 設定y軸的範圍
plt.ylim(0,100)
# 顯示圖形
plt.show()
2 問題分析
1.多元線性拟合
問題一可以了解為一個多元的線性拟合問題,y為睡眠品質SQ,X分别為各類影響因素,即:Y = SQ ,X1 = Reliability ,X2 = Psychoticism ,X3 = Nervousness ,X4 = Character。其表達式為:Y = aX1+bx2+cX3+dX4+e,其中abcd為要求的權重值,e為偏置。問題便轉化為求abcde的值。求得各參數值後,由于我們所要求的Y值隻有0,1,2,3,然而通過多元線性拟合後得到Y值需要通過四舍五入處理成0,1,2,3整數。最後評判模型預測的準确性。
2.分類聚類問題
問題一也可以了解為一個分類問題,SQ按照0,1,2,3分為四類,本文将運用多種聚類方法,通過比較各個模型的正确率來确定最優結果。
3 多元線性模型的實作
直接上代碼:
1.導入相關資料庫
#倒入資料庫
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
2.讀取資料集和預處理
data = pd.read_csv('Annex I.csv')#讀取
#為X指派
x = data[[ 'Age','Reliability','Psychoticism','Nervousness','Character']]
#為Y指派
y = data.SQ
3.模型的初始化
4.調用模型進行拟合
5.看一下結果
for i in zip(x.columns,model.coef_):
print(i)
結果:
(‘Age’, 0.008485289749629348)
(‘Reliability’, 0.0007205693003604623)
(‘Psychoticism’, 0.002565646794456601)
(‘Nervousness’, 0.007624798629370403)
(‘Character’, -0.0016430414645269718)
6.計算誤差
mean_squared_error(model.predict(x),y)
OUT:0.6594778436461478#越小越好
4 K-MEANS 聚類(無監督聚類)
K-Means模型概要:在運用模型前确定常數K,常數K意味着最終的聚類類别數,在本資料中,我們已經知道了睡眠品質SQ可分為0,1,2,3四類。模型首先随機標明初始點為質心,并通過計算每一個樣本與質心之間的相似度(這裡為歐式距離),将樣本點歸到最相似的類中,接着,重新計算每個類的質心(即為類中心),重複這樣的過程,直到質心不再改變,最終就确定了每個樣本所屬的類别以及每個類的質心。由于每次都要計算所有的樣本與每一個質心之間的相似度,故在大規模的資料集上,K-Means算法的收斂速度比較慢。
上代碼:
#導入函數庫
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn import metrics
#讀取資料及
data = pd.read_csv('Annex I.csv')
#開始利用模型進行預測
#考慮四種影響因素,n_clusters=4 分四類
y_pred = KMeans(n_clusters=4).fit_predict(data[['Age', 'Sex','Reliability','Psychoticism',
'Nervousness', 'Character']])
SQ_pre = pd.Series(y_pred)#把預測值添加上索引
#把預測值和真實結果放入一個清單
data_p = pd.DataFrame({'y_pre':SQ_pre ,'y':data.SQ})
#增加一列 判斷預測和真實值是否想等,傳回布爾值
data_p['acc'] = data_p.y_pre == data_p.y
ACC = data_p.acc.sum()/len(data_p)#計算正确率
print('分類準确率:', ACC)
分類準确率: 0.26019845644983464
5.利用SPSS 神經網絡預測分類
1.讀取資料
2.開始建立神經網絡模型
3.分析-神經網絡-多層感覺器
4.設定輸出
5.檢視結果
6.利用SPSS 決策樹聚類
1.分析-分類-決策樹
2.結果輸出
總結一下
各模型的準确率:
模型 | 準确率 |
---|---|
多元線性拟合 | 34& |
K-Means | 26% |
SPSS 多層感覺器 | 45.2% |
SPSS 決策樹 | 45.1% |
剛剛入門,有錯誤希望指出,後續會更新其他算法。
By dc mzx