1. 程式人生 > >【126】TensorFlow 使用皮爾遜相關係數找出和標籤相關性最大的特徵值

【126】TensorFlow 使用皮爾遜相關係數找出和標籤相關性最大的特徵值

在實際應用的時候,我們往往會收集多個維度的特徵值。然而這些特徵值未必都能派上用場。有些特徵值可能和標籤沒有什麼太大關係,而另外一些特徵值可能和標籤有很大的相關性。相關性不大的特徵值對於訓練模型沒有太大用處,還會影響效能。因此,最佳方式是找到相關性最大的幾個特徵值來訓練模型。

那麼,如何才能找到相關性最大的幾個特徵值呢?

為了解決這個問題,我們引入了皮爾遜相關係數(Pearson correlation coefficient)這一個數學工具。這裡是皮爾遜相關係數的維基百科。 簡單的解釋,皮爾遜相關係數是衡量兩個變數X和Y 線性相關性的工具。設 p 代表皮爾遜相關係數,p 是實數, p 大於等於 -1 並且 p 小於等於 1。其中0代表沒有線性相關,-1 代表負線性相關,1代表正線性相關。具體看下面的圖就會一目瞭然:

1.png

Python 的 pandas.DataFrame.corr 函式預設使用皮爾遜係數計算各個特徵值的相關性,在本文的Demo中有演示。本文仍然使用加利福尼亞房價的那套資料進行演示。

我先寫了個 ZcSummary 類來展示一下資料集的概要情況。這種做法在實際應用中可以及時發現數據集的異常情況。

ZcSummary :

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import math
from sklearn import metrics
from
IPython import display class ZcSummary: # 從CSV檔案中讀取資料,返回DataFrame型別的資料集合。 def read_csv(self): v_dataframe = pd.read_csv("http://114.116.18.230/california_housing_train.csv", sep=",") # 打亂資料集合的順序。有時候資料檔案有可能是根據某種順序排列的,會影響到我們對資料的處理。 v_dataframe = v_dataframe.reindex(np.random.
permutation(v_dataframe.index)) return v_dataframe # 預處理特徵值 def preprocess_features(self, california_housing_dataframe): selected_features = california_housing_dataframe[ ["latitude", "longitude", "housing_median_age", "total_rooms", "total_bedrooms", "population", "households", "median_income"] ] processed_features = selected_features.copy() # 增加一個新屬性:人均房屋數量。 processed_features["rooms_per_person"] = ( california_housing_dataframe["total_rooms"] / california_housing_dataframe["population"]) return processed_features # 預處理標籤 def preprocess_targets(self, california_housing_dataframe): output_targets = pd.DataFrame() # 數值過大可能引起訓練過程中的錯誤。因此要把房價數值先縮小成原來的 # 千分之一,然後作為標籤值返回。 output_targets["median_house_value"] = ( california_housing_dataframe["median_house_value"] / 1000.0) return output_targets # 主函式 def main(self): tf.logging.set_verbosity(tf.logging.ERROR) pd.options.display.max_rows = 10 pd.options.display.float_format = '{:.1f}'.format california_housing_dataframe = self.read_csv() # 對於訓練集,我們從共 17000 個樣本中選擇前 12000 個樣本。 training_examples = self.preprocess_features(california_housing_dataframe.head(12000)) training_targets = self.preprocess_targets(california_housing_dataframe.head(12000)) # 對於驗證集,我們從共 17000 個樣本中選擇後 5000 個樣本。 validation_examples = self.preprocess_features(california_housing_dataframe.tail(5000)) validation_targets = self.preprocess_targets(california_housing_dataframe.tail(5000)) # 展示資料集的概要情況。 print("Training examples summary:") display.display(training_examples.describe()) print("Validation examples summary:") display.display(validation_examples.describe()) print("Training targets summary:") display.display(training_targets.describe()) print("Validation targets summary:") display.display(validation_targets.describe()) t = ZcSummary() t.main()

程式執行結果:
2.png

現在,我們要計算一下皮爾遜係數。ZcPearson類為我計算出了所有的皮爾遜相關係數,並展示了出來,下面是程式碼:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import math
from sklearn import metrics
from IPython import display

class ZcPearson:
    # 從CSV檔案中讀取資料,返回DataFrame型別的資料集合。
    def read_csv(self):
        v_dataframe = pd.read_csv("http://114.116.18.230/california_housing_train.csv", sep=",")
        # 打亂資料集合的順序。有時候資料檔案有可能是根據某種順序排列的,會影響到我們對資料的處理。
        v_dataframe = v_dataframe.reindex(np.random.permutation(v_dataframe.index))
        return v_dataframe
    
    # 預處理特徵值
    def preprocess_features(self, california_housing_dataframe):
        selected_features = california_housing_dataframe[
            ["latitude",
             "longitude",
             "housing_median_age",
             "total_rooms",
             "total_bedrooms",
             "population",
             "households",
             "median_income"]
        ]
        processed_features = selected_features.copy()
        # 增加一個新屬性:人均房屋數量。
        processed_features["rooms_per_person"] = (
            california_housing_dataframe["total_rooms"] /
            california_housing_dataframe["population"])
        return processed_features


    # 預處理標籤
    def preprocess_targets(self, california_housing_dataframe):
        output_targets = pd.DataFrame()
        # 數值過大可能引起訓練過程中的錯誤。因此要把房價數值先縮小成原來的
        # 千分之一,然後作為標籤值返回。
        output_targets["median_house_value"] = (
            california_housing_dataframe["median_house_value"] / 1000.0)
        return output_targets
    
     # 主函式
    def main(self):
        tf.logging.set_verbosity(tf.logging.ERROR)
        pd.options.display.max_rows = 10
        pd.options.display.float_format = '{:.1f}'.format
        
        california_housing_dataframe = self.read_csv()
        # 對於訓練集,我們從共 17000 個樣本中選擇前 12000 個樣本。
        training_examples = self.preprocess_features(california_housing_dataframe.head(12000))
        training_targets = self.preprocess_targets(california_housing_dataframe.head(12000))
        # 對於驗證集,我們從共 17000 個樣本中選擇後 5000 個樣本。
        validation_examples = self.preprocess_features(california_housing_dataframe.tail(5000))
        validation_targets = self.preprocess_targets(california_housing_dataframe.tail(5000))
        
        # 計算出各個特徵值和標籤值之間的皮爾遜相關係數,並打印出來
        correlation_dataframe = training_examples.copy()
        correlation_dataframe["target"] = training_targets["median_house_value"]
        corr_result = correlation_dataframe.corr()
        print(corr_result)

        
        
t = ZcPearson()
t.main()

執行結果:

3.png

檢視結果,皮爾遜相關係數最大的特徵值是median_income。除此之外,我們還希望有一些相互之間的相關性不太密切的特徵,以便它們新增獨立資訊。從結果中看,可以認為緯度 latitude 比較符合要求。這樣,我們確定了要訓練的特徵值是 median_income 和 latitude。現在我們開始訓練模型,使用 ZcTrain 類:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import math
from sklearn import metrics
from IPython import display
  

class ZcTrain:
    # 從CSV檔案中讀取資料,返回DataFrame型別的資料集合。
    def read_csv(self):
        v_dataframe = pd.read_csv("http://114.116.18.230/california_housing_train.csv", sep=",")
        # 打亂資料集合的順序。有時候資料檔案有可能是根據某種順序排列的,會影響到我們對資料的處理。
        v_dataframe = v_dataframe.reindex(np.random.permutation(v_dataframe.index))
        return v_dataframe
    
    
    
    # 預處理特徵值
    def preprocess_features(self, california_housing_dataframe):
        selected_features = california_housing_dataframe[
            ["latitude",
             "longitude",
             "housing_median_age",
             "total_rooms",
             "total_bedrooms",
             "population",
             "households",
             "median_income"]
        ]
        processed_features = selected_features.copy()
        # 增加一個新屬性:人均房屋數量。
        processed_features["rooms_per_person"] = (
            california_housing_dataframe["total_rooms"] /
            california_housing_dataframe["population"])
        return processed_features


    # 預處理標籤
    def preprocess_targets(self, california_housing_dataframe):
        output_targets = pd.DataFrame()
        # Scale the target to be in units of thousands of dollars.
        output_targets["median_house_value"] = (
            california_housing_dataframe["median_house_value"] / 1000.0)
        return output_targets
    
    
    # 根據數學模型計算預測值。公式是 y = w0 + w1 * x1 + w2 * x2 .... + wN * xN
    def fn_predict(self, pa_dataframe, pa_weight_arr):
        v_result = []
        v_weight_num = len(pa_weight_arr)
        for var_row_index in pa_dataframe.index:
            y = pa_weight_arr[0]
            for v_index in range(v_weight_num-1):
                y = y + pa_weight_arr[v_index + 1] * pa_dataframe.loc[var_row_index].values[v_index]
            v_result.append(y)
        return v_result
    

    # 訓練形如 y = w0 + w1 * x1 + w2 * x2 + ...  的直線模型。x1 x2 ...是自變數,
    # w0 是常數項,w1 w2 ... 是對應自變數的權重。
    # feature_arr 特徵值的矩陣。每一行是 [1.0, x1_data, x2_data, ...] 
    # label_arr 標籤的陣列。相當於 y = kx + b 中的y。
    # training_steps 訓練的步數。即訓練的迭代次數。
    # period         誤差報告粒度
    # learning_rate 在梯度下降演算法中,控制梯度步長的大小。
    def fn_train_line(self, feature_arr, label_arr, validate_feature_arr, validate_label_arr, training_steps, periods, learning_rate):
        feature_tf_arr = feature_arr
        label_tf_arr = np.array([[e] for e in label_arr]).astype(np.float32)
        # 整個訓練分成若干段,即誤差報告粒度,用periods表示。
        # steps_per_period 表示平均每段有多少次訓練
        steps_per_period = training_steps / periods
        # 存放 L2 損失的陣列
        loss_arr = []
        # 權重陣列的長度。也就是權重的個數。
        weight_arr_length = len(feature_arr[0])
        # 開啟TF會話,在TF 會話的上下文中進行 TF 的操作。
        with tf.Session() as sess:
            # 訓練集的均方根誤差RMSE。這是儲存誤差報告的陣列。
            train_rmse_arr = []
            # 驗證集的均方根誤差RMSE。
            validate_rmse_arr = []

            # 設定 tf 張量(tensor)。注意:TF會話中的註釋裡面提到的常量和變數是針對TF設定而言,不是python語法。

            # 因為在TF運算過程中,x作為特徵值,y作為標籤
            # 是不會改變的,所以分別設定成input 和 target 兩個常量。
            # 這是 x 取值的張量。設一共有m條資料,可以把input理解成是一個m行2列的矩陣。矩陣第一列都是1,第二列是x取值。
            input = tf.constant(feature_tf_arr)
            # 設定 y 取值的張量。target可以被理解成是一個m行1列的矩陣。 有些文章稱target為標籤。
            target = tf.constant(label_tf_arr)

            # 設定權重變數。因為在每次訓練中,都要改變權重,來尋找L2損失最小的權重,所以權重是變數。
            # 可以把權重理解成一個多行1列的矩陣。初始值是隨機的。行數就是權重數。
            weights = tf.Variable(tf.random_normal([weight_arr_length, 1], 0, 0.1))

            # 初始化上面所有的 TF 常量和變數。
            tf.global_variables_initializer().run()
            # input 作為特徵值和權重做矩陣乘法。m行2列矩陣乘以2行1列矩陣,得到m行1列矩陣。
            # yhat是新矩陣,yhat中的每個數 yhat' = w0 * 1 + w1 * x1 + w2 * x2 ...。 
            # yhat是預測值,隨著每次TF調整權重,yhat都會變化。
            yhat = tf.matmul(input, weights)
            # tf.subtract計算兩個張量相減,當然兩個張量必須形狀一樣。 即 yhat - target。
            yerror = tf.subtract(yhat, target)
            # 計算L2損失,也就是方差。
            loss = tf.nn.l2_loss(yerror)
            # 梯度下降演算法。
            zc_optimizer = tf.train.GradientDescentOptimizer(learning_rate)
            # 注意:為了安全起見,我們還會通過 clip_gradients_by_norm 將梯度裁剪應用到我們的優化器。
            # 梯度裁剪可確保梯度大小在訓練期間不會變得過大,梯度過大會導致梯度下降法失敗。
            zc_optimizer = tf.contrib.estimator.clip_gradients_by_norm(zc_optimizer, 5.0)
            zc_optimizer = zc_optimizer.minimize(loss)
            for _ in range(periods):
                for _ in range(steps_per_period):
                    # 重複執行梯度下降演算法,更新權重數值,找到最合適的權重數值。
                    sess.run(zc_optimizer)
                    # 每次迴圈都記錄下損失loss的值,並放到陣列loss_arr中。
                    loss_arr.append(loss.eval())
                v_tmp_weight_arr = weights.eval()
                # 計算均方根誤差。其中 np.transpose(yhat.eval())[0] 把列向量轉換成一維陣列
                train_rmse_arr.append(math.sqrt(
                        metrics.mean_squared_error(np.transpose(yhat.eval())[0], label_tf_arr)))
                validate_rmse_arr.append(math.sqrt(
                        metrics.mean_squared_error(self.fn_predict(validate_feature_arr, v_tmp_weight_arr), validate_label_arr)))
            # 把列向量轉換成一維陣列
            zc_weight_arr = np.transpose(weights.eval())[0]
            zc_yhat = np.transpose(yhat.eval())[0]
        return (zc_weight_arr, zc_yhat, loss_arr, train_rmse_arr, validate_rmse_arr)
    
    
    # 構建用於訓練的特徵值。
    # pa_dataframe 原來資料的 Dataframe
    # 本質上是用二維陣列構建一個矩陣。裡面的每個一維陣列都是矩陣的一行,形狀類似下面這種形式:
    #    1.0, x1[0], x2[0], x3[0], ...
    #    1.0, x1[1], x2[1], x3[1], ...
    #    .........................
    # 其中x1, x2, x3 表示資料的某個維度,比如:"latitude","longitude","housing_median_age"。
    # 也可以看作是公式中的多個自變數。
    def fn_construct_tf_feature_arr(self, pa_dataframe):
        v_result = []
        # dataframe中每列的名稱。
        zc_var_col_name_arr = [e for e in pa_dataframe]
        # 遍歷dataframe中的每行。
        for row_index in pa_dataframe.index:
            zc_var_tf_row = [1.0]
            for i in range(len(zc_var_col_name_arr)):
                zc_var_tf_row.append(pa_dataframe.loc[row_index].values[i])
            v_result.append(zc_var_tf_row)
        return v_result
    
    # 畫損失的變化圖。
    # pa_ax  Axes
    # pa_arr_train_rmse 訓練次數。
    # pa_arr_validate_rmse 損失變化的記錄
    def fn_paint_loss(self, pa_ax, pa_arr_train_rmse, pa_arr_validate_rmse):
        pa_ax.plot(range(0, len(pa_arr_train_rmse)), pa_arr_train_rmse, label="training", color="blue")
        pa_ax.plot(range(0, len(pa_arr_validate_rmse)), pa_arr_validate_rmse, label="validate", color="orange")
    
    # 主函式
    def main(self):
        tf.logging.set_verbosity(tf.logging.ERROR)
        pd.options.display.max_rows = 10
        pd.options.display.float_format = '{:.1f}'.format
        
        california_housing_dataframe = self.read_csv()
        # 對於訓練集,我們從共 17000 個樣本中選擇前 12000 個樣本。
        training_examples = self.preprocess_features(california_housing_dataframe.head(12000))
        training_targets = self.preprocess_targets(california_housing_dataframe.head(12000))
        # 對於驗證集,我們從共 17000 個樣本中選擇後 5000 個樣本。
        validation_examples = self.preprocess_features(california_housing_dataframe.tail(5000))
        validation_targets = self.preprocess_targets(california_housing_dataframe.tail(5000))
        

        # pandas.DataFrame.corr 預設使用皮爾遜相關係數計算相關性。找到和標籤相關性
        # 最大的特徵值。利用這些相關性最大的特徵值構建特徵值數量最小的特徵集。
        minimal_features = [
            "median_income",
            "latitude",
        ]
        minimal_training_examples = training_examples[minimal_features]
        minimal_validation_examples = validation_examples[minimal_features]
        
        # 在模型訓練開始之前,做好特徵值的準備工作。構建適於訓練的矩陣。
        v_train_feature_arr = self.fn_construct_tf_feature_arr(minimal_training_examples)
        
        (v_weight_arr, v_yhat, v_loss_arr, v_train_rmse_arr, v_validate_rmse_arr) = self.fn_train_line(v_train_feature_arr, 
                    training_targets["median_house_value"], minimal_validation_examples, 
                    validation_targets["median_house_value"], 500, 20, 0.013)
        # 列印權重
        print("weights:  ", v_weight_arr)
        print("Training RMSE " + str(v_train_rmse_arr[len(v_train_rmse_arr) - 1]) + " Validate RMSE: " + 
          str(v_validate_rmse_arr[len(v_validate_rmse_arr) - 1]))
        
        # 畫出損失變化曲線
        fig = plt.figure()
        fig.set_size_inches(5,5)
        self.fn_paint_loss(fig.add_subplot(1,1,1), v_train_rmse_arr, v_validate_rmse_arr)
        
        plt.show()

        
t = ZcTrain();
t.main();
    
    

執行結果:

4.png

最後,我們用測試集來測試模型:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import math
from sklearn import metrics
from IPython import display

class ZcValidateTest:
    # 從CSV檔案中讀取資料,返回DataFrame型別的資料集合。
    def read_csv(self, pa_url):
        v_dataframe = pd.read_csv(pa_url, sep=",")
        # 打亂資料集合的順序。有時候資料檔案有可能是根據某種順序排列的,會影響到我們對資料的處理。
        v_dataframe = v_dataframe.reindex(np.random.permutation(v_dataframe.index))
        return v_dataframe
    
    # 預處理特徵值
    def preprocess_features(self, california_housing_dataframe):
        selected_features = california_housing_dataframe[
            [
                "median_income",
                "latitude"
             ]
        ]
        processed_features = selected_features.copy()
        
        return processed_features


    # 預處理標籤
    def preprocess_targets(self, california_housing_dataframe):
        output_targets = pd.DataFrame()
        # 數值過大可能引起訓練過程中的錯誤。因此要把房價數值先縮小成原來的
        # 千分之一,然後作為標籤值返回。
        output_targets["median_house_value"] 
            
           

相關推薦

126TensorFlow 使用相關係數標籤相關性特徵值

在實際應用的時候,我們往往會收集多個維度的特徵值。然而這些特徵值未必都能派上用場。有些特徵值可能和標籤沒有什麼太大關係,而另外一些特徵值可能和標籤有很大的相關性。相關性不大的特徵值對於訓練模型沒有太大用處,還會影響效能。因此,最佳方式是找到相關性最大的幾個特

利用相關係數與目標相關的特徵(Python實現)

#coding:utf-8 #檢測各特徵和輻照度之間的相關性以及各個特徵之間的相關性 from __future__ import division import tensorflow as tf import math import csv from sklearn imp

機器學習歐幾里德距離相關係數(筆記)

歐幾里德距離() 歐幾里德距離和皮爾遜相關係數在機器學習中都是對相關度的計算,歐幾里德距離是以人們一直評價的物品作為座標軸,將參與評價的人繪製到圖中,並考察他們彼此距離的遠近。例子(摘自集體智慧程式設計): #資料集 critics={ 'Lisa Rose':

Pearson()相關係數

統計相關係數簡介     由於使用的統計相關係數比較頻繁,所以這裡就利用幾篇文章簡單介紹一下這些係數。   相關係數:考察兩個事物(在資料裡我們稱之為變數)之間的相關程度。   如果有兩個變數:X、Y,最終計算出的相關係數的含義可以

相關係數餘弦相似度

先看看二者定義,給定兩個n維向量A,B: A=(a1,a2,…,an)A = (a_1, a_2, \ldots ,a_n)A=(a1​,a2​,…,an​) B=(b1,b2,…,bn)B = (b_1, b_2, \ldots ,b_n)B=(b1​,b2​

推薦演算法之-相關係數計算兩個使用者喜好相似度

<?php /** * 餘玄相似度計算出3個使用者的相似度 * 通過7件產品分析使用者喜好相似度 * 相似度使用函式 sim(user1,user2) =cos∂ * * 設A、B為多維

集體智慧程式設計-相關係數程式碼理解

剛開始看關於皮爾遜相關係數計算的程式碼,把我看得是暈頭轉向,不過在學習完概率論的課程後,發現結合公式再來看程式碼就會比較簡單了。 期望公式 E(x)=1n∑i=1nxi 方差公式 var(x)=

如何通俗易懂地理解相關係數

要理解 Pearson 相關係數,首先要理解協方差(Covariance)。協方差表示兩個變數 X,Y 間相互關係的數字特徵,其計算公式為: COV(X,Y)=1n−1∑n1(Xi−X⎯⎯⎯)(Yi−Y⎯⎯⎯) 當 Y = X 時,即與方差相同。當變數 X,

資料探勘之曼哈頓距離、歐幾裡距離、明氏距離、相關係數、餘弦相似度Python實現程式碼

# -*- coding:utf8 -*- from math import sqrt users = {"Angelica": {"Blues Traveler": 3.5, "Broken Bells": 2.0, "Norah Jones": 4.5, "Phoeni

相關係數 定義+python程式碼實現 (與王印討論公式)

作者簡介 南京大學,簡稱南大,[1] 是一所源遠流長的高等學府。追溯學脈古為源自孫吳永安元年的南京太學,歷經多次變遷,1949年“國立中央大學”易名“國立南京大學”,翌年徑稱“南京大學”,沿用至今。南京大學是教育部與江蘇省共建的全國重點大學,國家首批“211工程”、“9

相關係數的計算(python程式碼版)

作者簡介 南京大學,簡稱南大,[1] 是一所源遠流長的高等學府。追溯學脈古為源自孫吳永安元年的南京太學,歷經多次變遷,1949年“國立中央大學”易名“國立南京大學”,翌年徑稱“南京大學”,沿用至今。南京大學是教育部與江蘇省共建的全國重點大學,國家首批“211工程”、“9

marchine learning 之 相關係數

/**皮爾遜相關係數 * ρ =(∑xy - ∑x∑y/n)/(∑x^2 - (∑x)^2/n)(∑y^2-(∑y)^2/n)^0.5 */ public class PersonCorrelati

①協方差、相關係數相關係數),等同於:內積、餘弦值。

假設三維空間裡有很多點,每個點都是用三個維度來表示的。但你發現其實他們差不多都在同一個二維平面上。雖然不是完全在一個平面上,但距離那個平面的距離都很小,遠小於他們在這個平面上的互相距離。於是你想,如果把所有點都投影到這個二維平面,那你就可以用兩個維度來表示所有點,同時又不損失太多關於這些點的資訊。當你這麼做的

相似度演算法之相關係數

皮爾遜相關係數是比歐幾里德距離更加複雜的可以判斷人們興趣的相似度的一種方法。該相關係數是判斷兩組資料與某一直線擬合程式的一種試題。它在資料不是很規範的時候,會傾向於給出更好的結果。   如圖,Mick Lasalle為<<Superman>>評了3分

Spark/Scala實現推薦系統中的相似度演算法(歐幾里得距離、相關係數、餘弦相似度:附實現程式碼)

在推薦系統中,協同過濾演算法是應用較多的,具體又主要劃分為基於使用者和基於物品的協同過濾演算法,核心點就是基於"一個人"或"一件物品",根據這個人或物品所具有的屬性,比如對於人就是性別、年齡、工作、收入、喜好等,找出與這個人或物品相似的人或物,當然實際處理中參考的因子會複雜的多。 本篇文章不介紹相關數學概念,

Python學習筆記使用Python計算相關系數

自己 pre 求和 相關 學習筆記 python學習 tip urn pow 源代碼不記得是哪裏獲取的了,侵刪。此處博客僅作為自己筆記學習。 def multipl(a,b): sumofab=0.0 for i in range(len(a)):

相關系數

評價 item product reference ret calculate ati ack 相關系數 皮爾遜相關系數是比歐幾裏德距離更加復雜的可以判斷人們興趣的相似度的一種方法。該相關系數是判斷兩組數據與某一直線擬合程序的一種試題。它在數據不是很規範的時候,會傾向於給出

相關系數余弦相似性的關系

表現 差值 超過 商業 C4D 接下來 二維空間 相關 畢業 有兩篇回答,我覺得都是正確的,從不同的方向來看的。 作者:陳小龍鏈接:https://www.zhihu.com/question/19734616/answer/174098489來源:知乎著作權歸作者

相關系數理解

IT sel 開發 網站 依次 高中數學 開平 func 1.4 皮爾遜相關系數理解有兩個角度 其一, 按照高中數學水平來理解, 它很簡單, 可以看做將兩組數據首先做Z分數處理之後, 然後兩組數據的乘積和除以樣本數 Z分數一般代表正態分布中, 數據偏離中心點的距離.等於

相關系數(Pearson Correlation Coefficient, Pearson's r)

opera back 一個 tar post blank 圖片 art 正數 Pearson‘s r,稱為皮爾遜相關系數(Pearson correlation coefficient),用來反映兩個隨機變量之間的線性相關程度。 用於總體(population)時記作ρ