国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

機器學習項目實戰(zhàn)-能源利用率 Part-3(特征工程與特征篩選)

這篇具有很好參考價值的文章主要介紹了機器學習項目實戰(zhàn)-能源利用率 Part-3(特征工程與特征篩選)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

博主前期相關的博客可見下:
機器學習項目實戰(zhàn)-能源利用率 Part-1(數(shù)據(jù)清洗)
機器學習項目實戰(zhàn)-能源利用率 Part-2(探索性數(shù)據(jù)分析)
這部分進行的特征工程與特征篩選。

三 特征工程與特征篩選

一般情況下我們分兩步走:特征工程與特征篩選:

特征工程: 概括性來說就是盡可能的多在數(shù)據(jù)中提取特征,各種數(shù)值變換,特征組合,分解等各種手段齊上陣。

特征選擇: 就是找到最有價值的那些特征作為我們模型的輸入,但是之前做了那么多,可能有些是多余的,有些還沒被發(fā)現(xiàn),所以這倆階段都是一個反復在更新的過程。比如我在建模之后拿到了特征重要性,這就為特征選擇做了參考,有些不重要的我可以去掉,那些比較重要的,我還可以再想辦法讓其做更多變換和組合來促進我的模型。所以特征工程并不是一次性就能解決的,需要通過各種結果來反復斟酌。

3.1 特征變換 與 One-hot encode

有點像分析特征之間的相關性

features = data.copy()
numeric_subset = data.select_dtypes('number')
for col in numeric_subset.columns:
    if col == 'score':
        next
    else:
        numeric_subset['log_' + col] = np.log(abs(numeric_subset[col]) + 0.01)
        
categorical_subset = data[['Borough', 'Largest Property Use Type']]
categorical_subset = pd.get_dummies(categorical_subset)

features = pd.concat([numeric_subset, categorical_subset], axis = 1)
features.shape

這段代碼的目的是為了生成特征矩陣 features,它包含了原始數(shù)據(jù) data 的數(shù)值特征和分類特征的處理結果。

首先,代碼復制了原始數(shù)據(jù) data,并將其賦值給 features

接下來,通過 select_dtypes('number') 選擇了 data 中的數(shù)值類型的列,并將結果存儲在 numeric_subset 中。

然后,使用一個循環(huán)遍歷 numeric_subset 的列,對每一列進行處理。對于列名為 ‘score’ 的列,直接跳過(使用 next)。對于其他列,將其絕對值加上一個很小的常數(shù)(0.01),然后取對數(shù),并將結果存儲在 numeric_subset 中以 ‘log_’ 開頭的列名中。

接著,從 data 中選擇了 ‘Borough’ 和 ‘Largest Property Use Type’ 兩列作為分類特征,并使用 pd.get_dummies 進行獨熱編碼(One-Hot Encoding)得到它們的編碼結果,并將結果存儲在 categorical_subset 中。

最后,使用 pd.concatnumeric_subsetcategorical_subset 按列方向(axis=1)進行拼接,得到最終的特征矩陣 features。

最后一行代碼輸出了 features 的形狀(行數(shù)和列數(shù))。

機器學習項目實戰(zhàn)-能源利用率 Part-3(特征工程與特征篩選)

3.2 共線特征

在數(shù)據(jù)中Site EUI 和 Weather Norm EUI就是要考慮的目標,他倆描述的基本是同一個事

plot_data = data[['Weather Normalized Site EUI (kBtu/ft2)', 'Site EUI (kBtu/ft2)']].dropna()

plt.plot(plot_data['Site EUI (kBtu/ft2)'], plot_data['Weather Normalized Site EUI (kBtu/ft2)'], 'bo')
plt.xlabel('Site EUI'); plt.ylabel('Weather Norm EUI')
plt.title('Weather Norm EUI vs Site EUI, R = %.4f' % np.corrcoef(data[['Weather Normalized Site EUI (kBtu/ft2)', 'Site EUI (kBtu/ft2)']].dropna(), rowvar=False)[0][1])

機器學習項目實戰(zhàn)-能源利用率 Part-3(特征工程與特征篩選)

3.3 剔除共線特征

def remove_collinear_features(x, threshold):
    '''
    Objective:
        Remove collinear features in a dataframe with a correlation coefficient
        greater than the threshold. Removing collinear features can help a model
        to generalize and improves the interpretability of the model.
        
    Inputs: 
        threshold: any features with correlations greater than this value are removed
    
    Output: 
        dataframe that contains only the non-highly-collinear features
    '''
    
    y = x['score']
    x = x.drop(columns = ['score'])
    
    corr_matrix = x.corr()
    iters = range(len(corr_matrix.columns) - 1)
    drop_cols = []
    
    for i in iters:
        for j in range(i):
            item = corr_matrix.iloc[j: (j+1), (i+1): (i+2)]            
            col = item.columns
            row = item.index
            val = abs(item.values)           
            
            if val >= threshold:
                # print(col.values[0], "|", row.values[0], "|", round(val[0][0], 2))
                drop_cols.append(col.values[0])
        
    drops = set(drop_cols)
    # print(drops)
    x = x.drop(columns = drops)
    x = x.drop(columns = ['Weather Normalized Site EUI (kBtu/ft2)', 
                      'Water Use (All Water Sources) (kgal)',
                      'log_Water Use (All Water Sources) (kgal)',
                      'Largest Property Use Type - Gross Floor Area (ft2)'])
    x['score'] = y
    return x

features = remove_collinear_features(features, 0.6)  # 閾值為0.6
features = features.dropna(axis = 1, how = 'all')
print(features.shape)
features.head()

這段代碼定義了一個名為 remove_collinear_features 的函數(shù),用于移除具有高相關性的特征。移除具有高相關性的特征可以幫助模型泛化并提高模型的解釋性。

函數(shù)的輸入?yún)?shù)為 x(包含特征和目標變量的數(shù)據(jù)框)和 threshold(相關系數(shù)的閾值),閾值以上的特征相關性會被移除。

首先,將目標變量 score 存儲在變量 y 中,并將其從 x 中移除。

接下來,計算特征之間的相關系數(shù)矩陣 corr_matrix。

然后,使用兩個嵌套的循環(huán)遍歷相關系數(shù)矩陣中的元素。當相關系數(shù)的絕對值大于等于閾值時,將該特征的列名添加到 drop_cols 列表中。

完成循環(huán)后,將 drop_cols 轉換為集合 drops,以去除重復的特征列名。

然后,從 x 中移除 drops 中的特征列,以及其他預定義的特征列。

接下來,將目標變量 y 添加回 x 中,并將結果返回。

最后,對更新后的特征矩陣 features 進行處理,移除所有包含缺失值的列,并輸出其形狀(行數(shù)和列數(shù)),并展示前幾行數(shù)據(jù)。

機器學習項目實戰(zhàn)-能源利用率 Part-3(特征工程與特征篩選)

3.4 數(shù)據(jù)集劃分

no_score = features[features['score'].isna()]
score = features[features['score'].notnull()]
print('no_score.shape: ', no_score.shape)
print('score.shape', score.shape)

from sklearn.model_selection import train_test_split
features = score.drop(columns = 'score')
labels = pd.DataFrame(score['score'])
features = features.replace({np.inf: np.nan, -np.inf: np.nan})
X, X_test, y, y_test = train_test_split(features, labels, test_size = 0.3, random_state = 42)
print(X.shape)
print(X_test.shape)
print(y.shape)
print(y_test.shape)

這段代碼分為幾個步驟:

  1. 首先,將特征矩陣 features 分為兩部分:no_scorescore。其中,no_scorefeatures 中目標變量 score 為空的部分,而 score 則是 features 中目標變量 score 不為空的部分。

  2. 輸出 no_scorescore 的形狀(行數(shù)和列數(shù)),分別使用 no_score.shapescore.shape 打印結果。

  3. 導入 sklearn.model_selection 模塊中的 train_test_split 函數(shù)。

  4. score 中移除目標變量 score 列,得到特征矩陣 features

  5. 創(chuàng)建標簽(目標變量)矩陣 labels,其中只包含目標變量 score 列。

  6. 使用 replace 方法將 features 中的無窮大值替換為缺失值(NaN)。

  7. 使用 train_test_split 函數(shù)將特征矩陣 features 和標簽矩陣 labels 劃分為訓練集和測試集。參數(shù) test_size 設置測試集的比例為 0.3,random_state 設置隨機種子為 42。將劃分后的結果分別存儲在 X、X_test、yy_test 中。

  8. 輸出訓練集 X、測試集 X_test、訓練集標簽 y 和測試集標簽 y_test 的形狀(行數(shù)和列數(shù)),分別使用 X.shape、X_test.shape、y.shapey_test.shape 打印結果。

這段代碼的目的是將數(shù)據(jù)集劃分為訓練集和測試集,并準備好用于訓練和評估模型的特征矩陣和標簽矩陣。
機器學習項目實戰(zhàn)-能源利用率 Part-3(特征工程與特征篩選)

3.5 建立一個Baseline

在建模之前,我們得有一個最壞的打算,就是模型起碼得有點作用才行。

# 衡量標準: Mean Absolute Error
def mae(y_true, y_pred):
    return np.mean(abs(y_true - y_pred))

baseline_guess = np.median(y)

print('The baseline guess is a score of %.2f' % baseline_guess)
print('Baseline Performance on the test set: MAE = %.4f' % mae(y_test, baseline_guess))

這段代碼定義了一個衡量標準函數(shù) mae,并計算了一個基準預測結果。

  1. mae 函數(shù)計算了預測值與真實值之間的平均絕對誤差(Mean Absolute Error)。它接受兩個參數(shù) y_truey_pred,分別表示真實值和預測值。函數(shù)內部通過 np.mean(abs(y_true - y_pred)) 計算平均絕對誤差,并返回結果。

  2. baseline_guess 是基準預測的結果,它被設置為標簽(目標變量) y 的中位數(shù)。這相當于一種簡單的基準方法,用中位數(shù)作為所有預測的固定值。

  3. 使用 print 函數(shù)打印基準預測結果的信息。'The baseline guess is a score of %.2f' % baseline_guess 會輸出基準預測結果的值,保留兩位小數(shù)。'Baseline Performance on the test set: MAE = %.4f' % mae(y_test, baseline_guess) 會輸出基準預測結果在測試集上的性能,即平均絕對誤差(MAE),保留四位小數(shù)。

這段代碼的目的是計算基準預測結果,并輸出基準預測結果的信息以及在測試集上的性能評估(使用平均絕對誤差作為衡量標準)。

機器學習項目實戰(zhàn)-能源利用率 Part-3(特征工程與特征篩選)

3.6 保存數(shù)據(jù)

no_score.to_csv('data/no_score.csv', index = False)
X.to_csv('data/training_features.csv', index = False)
X_test.to_csv('data/testing_features.csv', index = False)
y.to_csv('data/training_labels.csv', index = False)
y_test.to_csv('data/testing_labels.csv', index = False)

Reference

機器學習項目實戰(zhàn)-能源利用率 Part-1(數(shù)據(jù)清洗)

機器學習項目實戰(zhàn)-能源利用率 Part-2(探索性數(shù)據(jù)分析)

機器學習項目實戰(zhàn)-能源利用率1-數(shù)據(jù)預處理文章來源地址http://www.zghlxwxcb.cn/news/detail-452057.html

到了這里,關于機器學習項目實戰(zhàn)-能源利用率 Part-3(特征工程與特征篩選)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 數(shù)學建模圈養(yǎng)湖羊的空間利用率

    問題 :規(guī)?;娜︷B(yǎng)養(yǎng)殖場通常根據(jù)牲畜的性別和生長階段分群飼養(yǎng),適應不同種類、不同階段的牲畜對空間的不同要求,以保障牲畜安全和健康;與此同時,也要盡量減少空間閑置所造成的資源浪費。在實際運營中,還需要考慮市場上飼料價格和產品銷售價格的波動以及氣

    2024年02月09日
    瀏覽(26)
  • 數(shù)學建模之圈養(yǎng)湖羊的空間利用率

    D題最新最全思路已出,歡迎后臺私信咨詢~~~~ 規(guī)?;娜︷B(yǎng)養(yǎng)殖場通常根據(jù)牲畜的性別和生長階段分群飼養(yǎng),適應不同種類、不同階段的牲畜對空間的不同要求,以保障牲畜安全和健康;與此同時,也要盡量減少空間閑置所造成的資源浪費。在實際運營中,還需要考慮市場上

    2024年02月09日
    瀏覽(21)
  • 【已證實】訓練神經網絡時,GPU利用率低而顯存占用率高的思考

    【已證實】訓練神經網絡時,GPU利用率低而顯存占用率高的思考

    已經證實了我的猜想“從batch_size角度考慮”的正確性。詳細解釋在后面更新。 GPU利用率低而顯存占用率高的思考 問題描述 :在深度學習training中,可以看到cpu利用率很高、內存占用率很高、顯存占用率很? ? ? ? ? ? ? ? ? ? ? ? ? ?高,但GPU利用率很低,train比較耗時。

    2024年02月03日
    瀏覽(21)
  • linux - 文件利用率快滿了 - mongo日志

    linux - 文件利用率快滿了 - mongo日志

    https://zhuanlan.zhihu.com/p/82430795 查看文件利用率 df -h 文件夾大小 ls -lh 逐級搜索大文件或目錄 du -sh * cd .. 返回上一層 ps -ef | grep mongo 啟動: .mongodb/bin/mongod -f mongodb/config/configsvr.conf 關閉 .mongodb/bin/mongod -f mongodb/config/configsvr.conf --shutdown data01/xxx/mongodb/data,下面三個log滿了(configs

    2024年02月09日
    瀏覽(20)
  • FPGA資源評估:如何優(yōu)化FPGA資源利用率

    FPGA資源評估:如何優(yōu)化FPGA資源利用率 在FPGA設計中,資源利用率是一個非常重要的指標。如何優(yōu)化FPGA資源利用率,進一步提高設計效率和性能呢?本文將從FPGA資源評估的角度,介紹如何合理地使用FPGA資源,減少浪費,實現(xiàn)資源的最優(yōu)配置。 在FPGA設計中,我們經常會遇到資

    2024年02月02日
    瀏覽(18)
  • 如何提升Linux服務器cpu利用率

    ? ? 目錄 一、安裝cpulimit和相關依賴包 1. 安裝cpulimit 2. 編寫提升cpu利用率腳本,并執(zhí)行 ????????如何有效提升服務器器CPU利用率,可以通過自定義腳本結合cpulimit達到提升利用率和控制到目標值。 1. 安裝cpulimit ##1. 安裝cpulimit ?yum install -y cpulimit ##2. 安裝依賴包 yum -y inst

    2024年02月10日
    瀏覽(34)
  • GPU顯存占滿但利用率卻很低

    GPU顯存占滿但利用率卻很低

    來帕多瓦聯(lián)培已經一個多月了,最近調代碼跑實驗又發(fā)現(xiàn)了這個問題。這里提供另外一個解決思路。一個原因還是 cpu沒跟上gpu節(jié)奏 。 通常我們都會用盡可能大的 batch 來占滿顯存。但是如果cpu的讀取和傳輸跟不上的話就會導致gpu利用率時上時下,而且訓練時間還會變長。 這

    2024年02月04日
    瀏覽(51)
  • linux top命令中 cpu 利用率/mem 使用率與load average平均負載計算方式

    top 命令是 Linux 上一個常用的系統(tǒng)監(jiān)控工具,它經常用來監(jiān)控 Linux 的系統(tǒng)狀態(tài),是常用的性能分析工具,能夠顯示較全的系統(tǒng)資源信息,包括系統(tǒng)負載,CPU 利用分布情況,內存使用,進程資源占用情況等。 如下示例: 這里主要看進程的 CPU%, MEM% 和 load averge 字段。 該字段指

    2024年02月03日
    瀏覽(27)
  • 阿里云云原生彈性方案:用彈性解決集群資源利用率難題

    阿里云云原生彈性方案:用彈性解決集群資源利用率難題

    隨著上云的認知更加普遍,我們發(fā)現(xiàn)除了以往占大部分的互聯(lián)網類型的客戶,一些傳統(tǒng)的企業(yè),一些制造類的和工業(yè)型企業(yè)客戶也都開始使用云原生的方式去做 IT 架構的轉型,提高集群資源使用率也成為企業(yè)上云的一致共識。大家上云的同時,開始思考有沒有云原生的方法能

    2024年02月02日
    瀏覽(22)
  • python實現(xiàn)監(jiān)控指定進程的CPU利用率、內存占用

    ????????因為需要一直關注被測軟件的CPU利用率和內存占用,人工記錄十分麻煩,所以想做一個應用程序來代替手工記錄。 思路: 1.彈窗,輸入進程號 2.獲取進程對象 3.日志保存在一個csv文件中,文件命名方式為:進程名+Process+進程號 4.文件第一行寫入進程名,第二行表

    2023年04月12日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包