機器學習入門-相關性分析


1.什么是機器學習?

像豆瓣、淘寶、QQ音樂這些推薦系統,背后的秘密武器正是機器學習

機器學習是:用機器學習算法來建立模型,並利用規律和模型對未知數據進行預測。

 

2.機器學習步驟

機器學習的基本步驟
1. 提出問題:
明確是分類問題還是回歸問題

2. 理解數據:
2.1 采集數據

sklearn.datasets中有練習數據(數據要有代表性,數據量要合適)
2.2 導入數據

pd.csv...
2.3 查看數據集信息

data.shape查看數據形狀;.shape[0]查看行數;.shape[1]查看列數
df.head()查看前幾行;
df.describe()查看數值數據的描述統計信息;
http://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匿名函數-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.報告撰寫
View Code

 

 

 3、協方差和相關系數

確定自變量和因變量之間的相關性

 

一、簡單線性回歸

回歸分析(Regression Analysis)

研究自變量與因變量之間關系形式的分析方法,它主要是通過建立因變量y與影響它的自變量 x_i(i=1,2,3… …)之間的回歸模型,來預測因變量y的發展趨向。

回歸分析的分類:

  線性回歸分析:簡單線性回歸、多重線性回歸

  非線性回歸分析:邏輯回歸、神經網絡

回歸分析的步驟:

  1、根據預測目標,確定自變量和因變量

  2、繪制散點圖,確定回歸模型類型

  3、估計模型參數,建立回歸模型

  4、對回歸模型進行檢驗

  5、利用回歸模型進行預測

簡單線性回歸模型

(1)第一步 確定變量

確定因變量和自變量很簡單,誰是已知,誰就是自變量,誰是未知,就就是因變量,因此,推廣費是自變量,銷售額是因變量;
import numpy
from pandas import read_csv
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression

data = read_csv(
 
)

(2)第二步 確定類型

繪制散點圖,確定回歸模型類型

根據前面的數據,畫出自變量與因變量的散點圖,看看是否可以建立回歸方程,

在簡單線性回歸分析中,我們只需要確定自變量與因變量的相關度為強相關性,即可確定可以建立簡單線性回歸方程,

求解出推廣費與銷售額之間的相關系數是0.94,也就是具有強相關性,

從散點圖中也可以看出,二者是有明顯的線性相關的,也就是推廣費越大,銷售額也就越大
#畫出散點圖,求x和y的相關系數
plt.scatter(data.活動推廣費,data.銷售額)

data.corr()

協方差:

 

如果有X,Y兩個變量,每個時刻的“X值與其均值之差”乘以“Y值與其均值之差”得到一個乘積再對這每時刻的乘積求和並求出均值(期望)

相關系數:

1)Pearson相關系數是在原始數據的方差和協方差基礎上計算得到,所以對離群值比較敏感,它度量的是線性相關。因此,即使pearson相關系數為0,也只能說明變量之間不存在線性相關,但仍有可能存在曲線相關。

 

 就是用X、Y的協方差除以X的標准差和Y的標准差

(3)第三步 建立模型

估計模型參數,建立回歸模型

要建立回歸模型,就要先估計出回歸模型的參數A和B,那么如何得到最佳的A和B,使得盡可能多的數據點落在或者更加靠近這條擬合出來的直線上呢?

最小二乘法

#估計模型參數,建立回歸模型
'''
(1) 首先導入簡單線性回歸的求解類LinearRegression
(2) 然后使用該類進行建模,得到lrModel的模型變量
'''

lrModel = LinearRegression()
#(3) 接着,我們把自變量和因變量選擇出來
x = data[['活動推廣費']]
y = data[['銷售額']]

#模型訓練
'''
調用模型的fit方法,對模型進行訓練
這個訓練過程就是參數求解的過程
並對模型進行擬合
'''
lrModel.fit(x,y)

(4)第四步 模型檢驗

對回歸模型進行檢驗

決定系數R平方

用來評估模型的精確度,即回歸線的擬合程度;
R平方越高,回歸模型越准確;

 

#對回歸模型進行檢驗
lrModel.score(x,y)

解釋:判定系數等於相關系數R的平方用於表示擬合得到的模型能解釋因變量變化的百分比,R平方越接近於1,表示回歸模型擬合效果越好 

(5)第五步 模型預測

  • 調用模型的predict方法,這個就是使用sklearn進行簡單線性回歸的求解過程;

 

用Python實現簡單線性回歸實例

一、機器學習的步驟:

 

 

 

 二、提出問題

學習時間和成績的關系

(明確是分類問題還是回歸問題)

三、理解數據

3.1 獲取數據源 本次數據源為自定義數據

data={
    '學習時間':[0.50,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25,
            2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50],
    '分數':[10,22,13,43,20,22,33,50,62,48,55,75,62,73,81,76,64,82,90,93]
}

3.2查看數據集信息

data.info()

data.shape查看數據形狀;

.shape[0]查看行數;.shape[1]查看列數 df.head()查看前幾行;

df.describe()查看數值數據的描述統計信息;

data_order=OrderedDict(data)
df = pd.DataFrame(data_order)

df.info()

 

 

 df.head()

 

 

 

自定義數據集共有兩個字段,學習時間和分數,共20條數據

四、清洗數據

數據自定義且格式正確

五、構建模型


#5.1繪制散點圖,確定回歸模型類型
# 提取特征值
exam_x = df.loc[:,'學習時間']
exam_y = df.loc[:,'分數']
plt.scatter(exam_x,exam_y,color='r',label='exam_score')
# 添加坐標標簽
plt.xlabel('hours')
plt.ylabel('score')
#顯示圖像
plt.show()

# 從以上散點圖可以初步判斷,該數據集特征和標簽的關系符合正線性回歸模型。

# 判斷學習時間和成績的相關性
df.corr()

求解出學習時間與成績之間的相關系數是0.924,也就是具有強相關性,從散點圖中也可以看出,二者是有明顯的線性相關的,也就是學習時間越長,分數越高

 

5.2建立訓練數據集和測試數據集 分割數據,將數據隨機分成訓練數據(80%)和測試數據(20%):

train_test_split是交叉驗證中常用的函數,功能是從樣本中隨機的按比例選取訓練數據(train)和
測試數據(test)
第一個參數:所要划分的樣本特征
第2個參數:所要划分的樣本標簽
train_size:訓練數據占比,如果是整數的話就是樣本的數量,這里是80%
from sklearn.model_selection import train_test_split

x_train , x_test , y_train , y_test = train_test_split(exam_x ,
                                                       exam_y,
                                                       train_size = 0.8)
#輸出數據大小
print('原始數據特征:',exam_x.shape ,
      ',訓練數據特征:', x_train.shape , 
      ',測試數據特征:',x_test.shape )
print('原始數據標簽:',exam_y.shape ,
      '訓練數據標簽:', y_train.shape ,
      '測試數據標簽:' ,y_test.shape)

5.3選擇機器學習算法:

#
導入算法
    邏輯回歸(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 )

本分析案例屬於強線性相關,選擇線性回歸算法進行 訓練模型

#   第1步:導入線性回歸
from sklearn.linear_model import LinearRegression 
#   第2步:創建模型:線性回歸
model = LinearRegression()      
#  第3步:訓練模型
model.fit(x_train , y_train)      

 

上面報錯的內容翻譯過來就是:

如果你輸入的數據只有1個特征,需要用array.reshape(-1, 1)來改變數組的形狀
#將訓練數據特征轉換成二維數組XX行*1列
x_train=x_train.values.reshape(-1,1) 

#將測試數據特征轉換成二維數組行數*1列
x_test=x_test.values.reshape(-1,1)    
#第1步:導入線性回歸
from sklearn.linear_model import LinearRegression  
# 第2步:創建模型:線性回歸 
model = LinearRegression()             
#第3步:訓練模型                                       
model.fit(x_train ,y_train) 

六、模型評估

6.1、求出線性回歸方程

a=model.intercept_    #截距
b=model.coef_         #回歸系數
print('最佳擬合線:截距a=',a,',回歸系數b=',b)

6.2繪圖

# 繪圖
import matplotlib.pyplot as plt              
# 訓練數據散點圖
plt.scatter(x_train, y_train, color='blue', label="train data")   
# 測試數據散點圖
plt.scatter(x_test,y_test,color='r',label='test data')
#  訓練數據的預測值
y_train_pred = model.predict(x_train)      


#  繪制最佳擬合
plt.plot(x_train, y_train_pred, color='black', linewidth=3, label="best line")  

# 添加圖標標簽
plt.legend(loc=2)                                                  
plt.xlabel("Hours")
plt.ylabel("Score")
plt.show() 

6.3評估模型:決定系數R平方
model.score(x_test , y_test)

 

R平方=0時,x變量與y變量無關

R平方=1時,x變量可預測y變量,且沒有誤差

R平方越大(0到1),回歸模型越精確

七、總結

研究問題:學習時間和成績的關系?

數據來源:自定義數據源共20條數據

特征值和標簽分別為:學習時間和成績

(特征是做出某個判斷的證據,標簽是結論)

機器學習主要的工作就是 提取出有用的特征構造從特征到標簽的映射
 
訓練集合測試集:表示訓練數據占用80%,測試數據占用20%

相關系數是0.924,也就是具有強相關性,選擇線性回歸算法進行 訓練模型

評估模型:決定系數R平方為0.93,表示回歸模型精准,擬合效果好

結論:學習時間與成績是強相關性也就是學習時間越長,分數越高


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM