歸一化問題

2022-02-12 18:53:42 字數 3465 閱讀 1522

原理:

進行縮放的原因和使用神經網路時的考慮是一樣的,由於rbf網路中採用樣本資料的歐式距離來計算。主要優點就是避免數值範圍較大的屬性控制數值範圍較小的屬性。另乙個優點就是避免計算時的numerical difficulties. 因為核值通常依賴特徵向量的內積(inner product),而較大的屬性值可能導致numerical問題。因此推薦把每個屬性縮放到[-1, 1]或者[0, 1]之間,而且前乙個範圍要比後乙個好,即對列向量進行規範化,其詳細解釋和計算公式見中的「should i standardize the input variables (column vectors)?」。libsvm中沒有考慮屬性的型別(效益、成本、固定、偏離、區間、偏離區間 6 種不同的屬性型別的規範化計算公式是不一樣的,詳見:徐澤水,《不確定多屬性決策方法及應用》,清華大學出版社,2004。)而採用了統一的線性縮放,作者以為此處可以改進一下。

需要注意的是,在進行測試之前,要對測試資料進行同樣的縮放操作。其實在libsvm中有程式(svmscale.exe)來進行縮放操作。

上面這兩種方法基本上可以完成所有的樣本的預處理了。

解決方法:

源:a結果:b

a的最大最小值 maxval,minval

b中希望的最大最小值 maxout,minout

迴圈template ostream& operator << (ostream& os, vector> vec)

return os;

}template t normalization(t *minval,t *maxval,int *data)

template vector> inversematrix(vector> ivecvec)

}return invers_vec;

}int main()

ivecvec.push_back(ivec);

ivec.clear();

} //儲存數列行數row

int row = ivecvec.size();

//數列列數

int line = ivecvec[0].size();

//儲存每列的最值

vector> m_val(line-1,2);

cout << inversematrix(ivecvec);

return 0;

}修改思路,終於搞定,就是麻煩點,演算法效率低點吧,繼續改進!

#include #include #include #include #include #include #includeusing namespace std;

template ostream& operator << (ostream& os, const vectorvec)

template ostream& operator << (ostream& os, vector> vec)

return os;

}template t normalization(t minval,t maxval,t data)

template vector> get_vec_normalization(vector> ivecvec)

m_val[i][0]=min_val;

m_val[i][1] = max_val;

}//歸一化

for (int i = 0; i < line; ++i)

}return ivecvec;

}int main()

ivecvec.push_back(ivec);

ivec.clear();

} cout << get_vec_normalization(ivecvec);

return 0;

}

還是儲存到檔案比較以後進行處理,繼續改:

#include #include #include #include #include #include #includeusing namespace std;

template ostream& operator << (ostream& os, const vectorvec)

template ostream& operator << (ostream& os, vector> vec)

return os;

}template t normalization(t minval,t maxval,t data)

template vector> get_vec_normalization(vector> ivecvec)

m_val[i][0]=min_val;

m_val[i][1] = max_val;

} //歸一化

for (int i = 0; i < line; ++i) }

for (int i = 0; i < row; ++i)

outfile << endl;

} outfile.close();

return ivecvec;

}int main()

ivecvec.push_back(ivec);

ivec.clear();

} cout << get_vec_normalization(ivecvec);

return 0;

}

根據公式

對原來的**進行修改:

#include #include #include #include #include #include #includeusing namespace std;

template ostream& operator << (ostream& os, const vectorvec)

template ostream& operator << (ostream& os, vector> vec)

return os;

}template t normalization(t y_min,t y_max,t value,int y_upper,int y_lower)

template vector> get_vec_normalization(vector> ivecvec)

m_val[i][0]=min_val;

m_val[i][1] = max_val;

} //歸一化

for (int i = 0; i < line; ++i) }

for (int i = 0; i < row; ++i)

outfile << endl;

} outfile.close();

return ivecvec;

}int main()

ivecvec.push_back(ivec);

ivec.clear();

} cout << get_vec_normalization(ivecvec);

return 0;

}

資料歸一化問題討論

一 參考資料歸一化彙總的帖子 需要說明的事並不是任何問題都必須事先把原始資料進行規範化,也就是資料規範化這一步並不是必須要做的,要具體問題具體看待,測試表明有時候規範化後的 準確率比沒有規範化的 準確率低很多.就最大最小值法而言,當你用這種方式將原始資料規範化後,事實上意味著你承認了乙個假設就是測試...

特徵歸一化的方法 線性歸一化 零均值歸一化

常用歸一化方法 1 線性歸一化,線性歸一化會把輸入資料都轉換到 0 1 的範圍,公式如下 該方法實現對原始資料的等比例縮放,其中xnorm為歸一化後的資料,x為原始資料,xmax xmin分別為原始資料集的最大值和最小值。優點 通過利用變數取值的最大值和最小值將原始資料轉換為界於某一特定範圍的資料,...

資料歸一化

近來,在網上搜了很多關於資料歸一化的帖子,看了太多,很雜,這裡整理總結一下 歸一化是一種資料預處理方法,就是要把你需要處理的資料經過處理後 通過某種演算法 限制在你需要的一定範圍內,為了後面資料處理的方便,其次是保正程式執行時 收斂加快。比如說,對於奇異樣本資料 所謂奇異樣本資料資料指的是相對於其他...