ZongSingHuang / Binary-Whale-Optimization-Algorithm

Tawhid, M.A., Ibrahim, A.M. Feature selection based on rough set approach, wrapper approach, and binary whale optimization algorithm. Int. J. Mach. Learn. & Cyber. 11, 573–602 (2020). https://doi.org/10.1007/s13042-019-00996-5
MIT License
15 stars 4 forks source link

Another question #2

Open Njzjhd opened 3 years ago

Njzjhd commented 3 years ago

cross_val_score(model, X_train, y_train, cv=5, scoring="neg_mean_squared_error", n_jobs=-1).mean()

Your': cross_val_score(KNeighborsClassifier(n_neighbors=5), X[:, x[i, :].astype(bool)], y, cv=skf), right? scoring?

ZongSingHuang commented 3 years ago

cross_val_score(model, X_train, y_train, cv=5, scoring="neg_mean_squared_error", n_jobs=-1).mean()

Your': cross_val_score(KNeighborsClassifier(n_neighbors=5), X[:, x[i, :].astype(bool)], y, cv=skf), right? scoring?

  1. your cv is for regression, my cv is for classification
  2. I didn't define a loss function on classification, because sklearn will auto-detect image
  3. If you want to adopt meta-algorithm to feature selection on regression problem, you can rewrite like cross_val_score(model, X_train[:, selected feature], y_train, cv=5, scoring="neg_mean_squared_error", n_jobs=-1).mean().abs() because sklearn's cross_val_score value is greater_is_better=False, so we always get neg-value, but our goal is loss=0, and 0>neg_valus
Njzjhd commented 3 years ago

Thanks very much!

Njzjhd commented 3 years ago
for i in range(x.shape[0]):
    if np.sum(x[i, :])>0:
        scores = cross_val_score(LGBMRegressor(), X_train[:, x[i, :].astype(bool)], y_train, cv=10, 
           scoring="neg_mean_absolute_error", n_jobs=-1).mean()
        loss[i] = 0.99*(1-scores) + 0.01*(np.sum(x[i, :])/X_train.shape[1])

I'd like to ask a question and I'd like you to help me revise it. Does it make sense for me to write it this way, for the regression problem? Thanks!

ZongSingHuang commented 3 years ago
for i in range(x.shape[0]):
    if np.sum(x[i, :])>0:
        scores = cross_val_score(LGBMRegressor(), X_train[:, x[i, :].astype(bool)], y_train, cv=10, 
           scoring="neg_mean_absolute_error", n_jobs=-1).mean()
        loss[i] = 0.99*(1-scores) + 0.01*(np.sum(x[i, :])/X_train.shape[1])

I'd like to ask a question and I'd like you to help me revise it. Does it make sense for me to write it this way, for the regression problem? Thanks!

Can u speak Chinese, I u can, we can speed up the efficiency of the discussion check scores content, I guess it is the 10x1 negative value array, you should abs() it, because our goal is scores.mean().abs()=0 this is a toy example, you can see, the MLR is a perfect fit for data, and scores are very close to 0, that is the reason why not only mean() but also abs().By the way, do not pick up scores.mean().abs().max(), this is a terrible idea.

image

so, you should rewrite it as follows image

ZongSingHuang commented 3 years ago

reference

GWOSVR

Njzjhd commented 3 years ago

尊敬的作者:

 你好,我可以讲中文。很高兴你能回答我的问题。我们可以通过中文交流。
 非常感谢你的回复,周末打扰你。
 因为,刚刚做这方面的工作,会遇到很多问题。希望能够多请教你。
 真挚的问候!
ZongSingHuang commented 3 years ago

尊敬的作者:

 你好,我可以讲中文。很高兴你能回答我的问题。我们可以通过中文交流。
 非常感谢你的回复,周末打扰你。
 因为,刚刚做这方面的工作,会遇到很多问题。希望能够多请教你。
 真挚的问候!

好的,我目前也是從事相關研究,我們可以互相交流。 另外,提供一些建議

  1. 當你在使用啟發式演算法進行特徵篩選時,不要使用複雜的預測模型。
  2. 當你在使用啟發式演算法同時進行特徵篩選與參數調整時,這會是一個很耗時的工程
  3. 千萬不要將啟發式演算法應用在多層的神經網路,這只是在浪費時間,即便有些期刊在做相關研究
  4. 我的經驗告訴我,當使用啟發式演算法對SVR(rbf)進行特徵篩選和參數調整時,容易有過度擬合和計算時間過長問題,因此我建議你使用簡單的預測模型(MLR)。因為你會發現,很多特徵篩選相關的期刊都選擇使用簡單的分類模型(KNN)
ZongSingHuang commented 3 years ago

嗨,你的Loss函數應該寫成這樣才對。(1-scores)是用在取得分類模型的錯誤率,也就是(1-正確率),而回歸模型的scores是預測誤差,所以不需要再減1,而且neg_mean_absolute_error的單位也不是百分比 image

Njzjhd commented 3 years ago

早上好,朋友

很感谢你的4条建议,启发式算法中拟合模型确实需要用一些简单的模型,这个建议很重要。我的理解是,在保证精度的同时,需要尽可能的降低优化时间。
Njzjhd commented 3 years ago

“嗨,你的Loss函數應該寫成這樣才對。(1-scores)是用在取得分類模型的錯誤率,也就是(1-正確率),而回歸模型的scores是預測誤差,所以不需要再減1,而且neg_mean_absolute_error的單位也不是百分比” 针对你的建议,如果我没有理解错的话,scoring我应该选择"neg_mean_squarred_error"? 针对于loss函数,我可以用如下的公式吗: for i in range(x.shape[0]): if np.sum(x[i, :])>0: scores = cross_val_score(决策树(简单一点的模型), X_train[:, x[i, :].astype(bool)], y_train, cv=10, scoring="neg_mean_squarred_error", n_jobs=-1).mean() loss[i] = 0.99scores + 0.01(np.sum(x[i, :])/X_train.shape[1])

此外,我认为有一个论文的idea,目前的算法多集中于做分类问题,我认为你的技巧和能力可以弥补一下回归问题。这可以从学术角度,探讨一下。

Njzjhd commented 3 years ago

我今天有时间看到了你给我推荐的论文: ”A wrapper approach-based key temperature point selection and thermal error modeling method“

针对于论文的损失函数:

loss =a* ave(RMSE)+p/len(总特征) p为选择的特征, len(总特征)为所有的特征,这样看来跟你的分类问题的损失函数很像。

Njzjhd commented 3 years ago

针对于你的论文复现,代码中应该没有涉及到粗糙集的问题吧? 我的理解正确吗

ZongSingHuang commented 3 years ago

“嗨,你的Loss函數應該寫成這樣才對。(1-scores)是用在取得分類模型的錯誤率,也就是(1-正確率),而回歸模型的scores是預測誤差,所以不需要再減1,而且neg_mean_absolute_error的單位也不是百分比” 针对你的建议,如果我没有理解错的话,scoring我应该选择"neg_mean_squarred_error"? 针对于loss函数,我可以用如下的公式吗: for i in range(x.shape[0]): if np.sum(x[i, :])>0: scores = cross_val_score(决策树(简单一点的模型), X_train[:, x[i, :].astype(bool)], y_train, cv=10, scoring="neg_mean_squarred_error", n_jobs=-1).mean() loss[i] = 0.99scores + 0.01(np.sum(x[i, :])/X_train.shape[1])

此外,我认为有一个论文的idea,目前的算法多集中于做分类问题,我认为你的技巧和能力可以弥补一下回归问题。这可以从学术角度,探讨一下。

可以,同時也可以嘗試其他的scoring, 例如maape、nrmse、rmsse

ZongSingHuang commented 3 years ago

我今天有时间看到了你给我推荐的论文: ”A wrapper approach-based key temperature point selection and thermal error modeling method“

针对于论文的损失函数:

loss =a* ave(RMSE)+p/len(总特征) p为选择的特征, len(总特征)为所有的特征,这样看来跟你的分类问题的损失函数很像。

是的,分類問題和回歸問題的計算方式非常類似,兩者差別僅在左半式

  1. 分類問題:loss =w1*(1-acc_correct) +w2*p/len(总特征)
  2. 回歸問題:loss =w1*predict_error +w2*p/len(总特征)

另外,多數的特徵篩選論文著重於分類問題,我的猜想是,因為UCI提供的免費資料庫大多為分類性質的關係,回歸性質的資料庫較難以取得。

最後,你正在閱讀的這篇論文,作者對SVR的超參數進行二進位編碼,我自己是採用實數編碼,雖然沒有實際比較,但我認為實數編碼帶來的效率會更高

ZongSingHuang commented 3 years ago

针对于你的论文复现,代码中应该没有涉及到粗糙集的问题吧? 我的理解正确吗

我在本專案中並沒有實現Rough set,原因是,我目前正在將WOA-SVR(rbf)和GWO-MLR應用在現實的回歸問題中,而且效果非常明顯

Njzjhd commented 3 years ago

感谢你的回复以及你的建议,真挚的感谢。

对于前两天讨论的问题,我有一个疑问。

for i in range(x.shape[0]): if np.sum(x[i, :])>0:尽管对于上述代码你实现了loop,但是x.shape[0]中只有一个样本,我不清楚为什么这么做?对于有些特征之间存在冗余,比如a1和a2的皮尔逊相关性大于0.8, 但是a1和y的相关性为0.6, a2和y的相关性为0.61. 这种特征对于高维数据很多,粗糙集可以解决此类问题吗?针对于你说的粗糙集在回归问题的优异表现,会实现开源吗?或者你有什么推荐的开源项目吗(粗糙集),目前我仍然不会实现,谢谢

------------------ 原始邮件 ------------------ 发件人: "ZongSingHuang/Binary-Whale-Optimization-Algorithm" <notifications@github.com>; 发送时间: 2021年1月24日(星期天) 中午11:03 收件人: "ZongSingHuang/Binary-Whale-Optimization-Algorithm"<Binary-Whale-Optimization-Algorithm@noreply.github.com>; 抄送: "至爱❤️"<2318109878@qq.com>;"Author"<author@noreply.github.com>; 主题: Re: [ZongSingHuang/Binary-Whale-Optimization-Algorithm] Another question (#2)

针对于你的论文复现,代码中应该没有涉及到粗糙集的问题吧? 我的理解正确吗

我在本專案中並沒有實現Rough set,原因是,我目前正在將WOA-SVR(rbf)和GWO-MLR應用在現實的回歸問題中,而且效果非常明顯

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

ZongSingHuang commented 3 years ago

感谢你的回复以及你的建议,真挚的感谢。 对于前两天讨论的问题,我有一个疑问。 for i in range(x.shape[0]): if np.sum(x[i, :])>0:尽管对于上述代码你实现了loop,但是x.shape[0]中只有一个样本,我不清楚为什么这么做?对于有些特征之间存在冗余,比如a1和a2的皮尔逊相关性大于0.8, 但是a1和y的相关性为0.6, a2和y的相关性为0.61. 这种特征对于高维数据很多,粗糙集可以解决此类问题吗?针对于你说的粗糙集在回归问题的优异表现,会实现开源吗?或者你有什么推荐的开源项目吗(粗糙集),目前我仍然不会实现,谢谢 ------------------ 原始邮件 ------------------ 发件人: "ZongSingHuang/Binary-Whale-Optimization-Algorithm" <notifications@github.com>; 发送时间: 2021年1月24日(星期天) 中午11:03 收件人: "ZongSingHuang/Binary-Whale-Optimization-Algorithm"<Binary-Whale-Optimization-Algorithm@noreply.github.com>; 抄送: "至爱❤️"<2318109878@qq.com>;"Author"<author@noreply.github.com>; 主题: Re: [ZongSingHuang/Binary-Whale-Optimization-Algorithm] Another question (#2) 针对于你的论文复现,代码中应该没有涉及到粗糙集的问题吧? 我的理解正确吗 我在本專案中並沒有實現Rough set,原因是,我目前正在將WOA-SVR(rbf)和GWO-MLR應用在現實的回歸問題中,而且效果非常明顯 — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

  1. 在主程式的loss部分,我是從其他專中直接將架構複製過來,所以即使只有一個樣本,我還是不更動原始架構,畢竟我未來可能會更動核心演算法,這時回傳的樣本可能不只一個
  2. 我沒有實現過Rough set,所以沒辦法回答你這方面(Rough set)的問題
  3. 你舉的例子我也曾經思考過,我做出下列解釋(1)pearson分析僅適用於考慮線性關係下的1對1,並不適用於非線性多對1,因此在非線性擬合中,線性擬合的結果將被推翻
  4. 有些學者也考慮到你出的假設的,因此有發表相關的期刊(如參考1-3),但有個致命問題在,(a)我們如何假定特徵組合應該要被分幾群(b)分群完畢後再分別挑選一個有價值的特徵,該價值由線性關係方式判定,那非線性關係呢。我希望將一切都自動化,因此我選擇讓演算法自行挑選重要的特徵,這時候如何定義Loss就是一個非常重要的議題,因為我們不能提供錯誤訊息給演算法,否則毀讓演算法誤判
  5. 這是我聽到的一種做法,如參考4 image

參考資料:

  1. K-means+Pearson: Integrated thermal error modeling of machine tool spindle using a chicken swarm optimization algorithm-based radial basic function neural network
  2. FCM+Pearson: Spindle thermal error modeling based on selective ensemble BP neural networks
  3. SOM+Pearson: Thermal error modeling of machine tool spindle based on the improved algorithm optimized BP neural network
  4. https://www.tiri.narl.org.tw/Files/Doc/Publication/InstTdy/221/02210560.pdf
Njzjhd commented 3 years ago

感谢作者的建议,特征选择是一个有趣的过程。我会尽力实现粗糙集并分享给你。昨天太忙了,今天有时间回复你。

ZongSingHuang commented 3 years ago

感谢作者的建议,特征选择是一个有趣的过程。我会尽力实现粗糙集并分享给你。昨天太忙了,今天有时间回复你。

Looking forward to your results and wish you all the best

Njzjhd commented 3 years ago

Thanks

------------------ 原始邮件 ------------------ 发件人: "ZongSingHuang/Binary-Whale-Optimization-Algorithm" <notifications@github.com>; 发送时间: 2021年1月26日(星期二) 上午9:49 收件人: "ZongSingHuang/Binary-Whale-Optimization-Algorithm"<Binary-Whale-Optimization-Algorithm@noreply.github.com>; 抄送: "至爱❤️"<2318109878@qq.com>;"Author"<author@noreply.github.com>; 主题: Re: [ZongSingHuang/Binary-Whale-Optimization-Algorithm] Another question (#2)

感谢作者的建议,特征选择是一个有趣的过程。我会尽力实现粗糙集并分享给你。昨天太忙了,今天有时间回复你。

Looking forward to your results and wish you all the best

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.