網(wǎng)絡(luò)的車速預(yù)測模型:從原理到工程實踐)
2. 車速預(yù)測這件事為什么值得專門做個模型做整車控制或者智能駕駛相關(guān)的朋友對“預(yù)測車速”這個需求應(yīng)該都不陌生。無論是混動車的能量管理策略還是純電車的續(xù)航估算又或者是自適應(yīng)巡航的平順性控制都需要對未來幾秒、十幾秒的車速變化有一個提前量。過去很多項目里用的是查表法或者簡單線性外推但實測下來車速變化根本不是線性關(guān)系——前車剎車、紅綠燈切換、坡道起伏任何一個擾動都會讓線性預(yù)測瞬間失效。我最早接觸這個方向是因為一個混動能量管理策略的項目。當(dāng)時需要預(yù)知未來5到15秒的車速區(qū)間用來決定發(fā)動機什么時候介入、什么時候純電行駛電池SOC的分配也要跟著車速預(yù)測走。試過幾種方案包括ARIMA、BP神經(jīng)網(wǎng)絡(luò)最后落在了RBF神經(jīng)網(wǎng)絡(luò)上測試效果最符合預(yù)期。所以這篇就圍繞“基于RBF神經(jīng)網(wǎng)絡(luò)模型根據(jù)歷史車速信息預(yù)測將來幾秒預(yù)測時域的車速信息”這個時序預(yù)測模型把我實際做過的方案、踩過的坑、調(diào)過的參數(shù)完整展開說說。這套東西適合誰參考如果你是做整車控制策略的需要車速預(yù)測作為上層決策的輸入或者你在做智能駕駛相關(guān)的工況預(yù)測再或者你只是對RBF神經(jīng)網(wǎng)絡(luò)做時序預(yù)測感興趣想看看它在實際工程里怎么落地——這篇都能給你一個可以直接復(fù)用的思路。內(nèi)容上我會把RBF網(wǎng)絡(luò)的原理、數(shù)據(jù)預(yù)處理、訓(xùn)練細節(jié)、驗證方法一條線講清楚不只是貼一段能跑的代碼而是解釋每一步為什么這么做。2. 整體設(shè)計與方案選型為什么是RBF而不是BP或LSTM2.1 需求拆解預(yù)測時域與輸入時域的確定先說清楚模型要解決什么問題。輸入是一段歷史車速序列輸出是未來一段時間的車速序列。這里有兩個關(guān)鍵參數(shù)要先定下來輸入時域用過去多少秒的數(shù)據(jù)和預(yù)測時域要預(yù)測未來多少秒。在基于歷史車速做預(yù)測這類場景里輸入時域的選擇有一個經(jīng)驗范圍一般取預(yù)測時域的1到3倍比較合理。比如要預(yù)測未來5秒那輸入過去10秒或15秒的車速數(shù)據(jù)就夠了。取太短模型看不到足夠的趨勢變化預(yù)測結(jié)果容易跟丟實際車速取太長輸入維度變大訓(xùn)練開銷增加而且過于久遠的歷史信息對近未來預(yù)測的幫助其實是邊際遞減的。我當(dāng)時的方案是針對固定時間步長60ms、預(yù)測時域約3秒對應(yīng)50個時間步的場景來做最后輸入時域定為160個時間步也就是過去9.6秒的歷史數(shù)據(jù)。這個比例大概是3:1實測下來精度和開銷比較平衡。如果是預(yù)測時域更長的場景比如10秒以上我個人傾向于先用RBF模型粗預(yù)測再配合道路坡度等外部信息做修正而不是一味地拉大輸入時域。2.2 為什么淘汰BP和LSTMRBF的核心優(yōu)勢在選型階段我對比過BP神經(jīng)網(wǎng)絡(luò)、LSTM和RBF神經(jīng)網(wǎng)絡(luò)。先說結(jié)論BP在短時域預(yù)測上不是不能用但它有一個很麻煩的缺點——它是一個全局逼近網(wǎng)絡(luò)每次更新權(quán)重都會影響整個網(wǎng)絡(luò)的輸出訓(xùn)練收斂速度慢而且容易陷入局部最優(yōu)。在車速預(yù)測這個實時性要求比較高的場景訓(xùn)練效率和模型更新速度都是硬指標BP并不理想。LSTM的問題倒不是精度而是工程成本。它在時序預(yù)測上確實很強但網(wǎng)絡(luò)結(jié)構(gòu)復(fù)雜參數(shù)量大訓(xùn)練時間長模型文件也大。在實車控制器或者實驗室的快速原型里硬件資源往往有限LSTM的推理速度能不能滿足控制周期的要求是要打個問號的。而且LSTM需要大量數(shù)據(jù)來發(fā)揮優(yōu)勢如果數(shù)據(jù)量不大優(yōu)勢根本體現(xiàn)不出來。RBF神經(jīng)網(wǎng)絡(luò)則提供了很好的平衡點。它的核心思想是用一組徑向基函數(shù)通常用高斯函數(shù)作為隱含層的激活函數(shù)每個隱含層節(jié)點只對輸入空間的一個局部區(qū)域產(chǎn)生響應(yīng)。這個“局部逼近”的特性決定了它的訓(xùn)練速度非??於也淮嬖贐P那種全局權(quán)值耦合的問題。對車速預(yù)測這種輸入輸出關(guān)系相對清晰、但非線性特征明顯的場景RBF的擬合能力完全夠用訓(xùn)練和更新成本卻低一個量級。2.3 網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計與參數(shù)初始化思路RBF網(wǎng)絡(luò)的標準結(jié)構(gòu)是三層的輸入層、隱含層徑向基層、輸出層。車速預(yù)測這個任務(wù)里輸入層節(jié)點數(shù)就是輸入時域的步數(shù)160個輸出層節(jié)點數(shù)是預(yù)測步數(shù)50個關(guān)鍵是隱含層節(jié)點數(shù)和基函數(shù)的中心和寬度怎么確定。首選做法是用K均值聚類來確定基函數(shù)中心。把輸入樣本聚成K類每類的質(zhì)心就作為基函數(shù)中心類別數(shù)K就是隱含層節(jié)點數(shù)。K的選擇一般通過交叉驗證來找但實際項目中可以先從一個搜索范圍入手比如在50到300之間按步長嘗試畫一條“K值與預(yù)測誤差”的關(guān)系曲線找一個誤差開始趨于平緩的拐點位置。這比盲目迭代省時間多了?;瘮?shù)寬度sigma也有講究。過小會導(dǎo)致每個基函數(shù)只對極窄的區(qū)域響應(yīng)網(wǎng)絡(luò)魯棒性差過大會導(dǎo)致各個基函數(shù)的響應(yīng)區(qū)域嚴重重疊失去局部逼近的意義。常用的做法是用每個中心到其他中心之間的平均距離來估計我后來寫代碼時直接用了標準化距離乘以一個縮放系數(shù)的方案方便在不同數(shù)據(jù)范圍下統(tǒng)一調(diào)整。輸出層權(quán)重則通過最小二乘法一次性求解。這一層是線性的所以不存在迭代收斂的問題。這也是RBF網(wǎng)絡(luò)訓(xùn)練快的一個根本原因后續(xù)實操部分會把這個過程拆開講。3. 數(shù)據(jù)預(yù)處理與訓(xùn)練流程的關(guān)鍵細節(jié)3.1 車速數(shù)據(jù)清洗的兩個“隱形坑”車速數(shù)據(jù)通常來自整車CAN總線或仿真工況數(shù)據(jù)第一個坑就是零值跳變。車輛在等紅燈或者擁堵路段頻繁停車車速會在0附近來回跳如果不做處理模型會把這些“假停頓”學(xué)習(xí)成常態(tài)預(yù)測出的車速曲線會出現(xiàn)不該有的滯留段。我的處理方式是設(shè)置一個滯回邏輯車速低于某個極小門限比如0.1km/h且持續(xù)超過200ms才判定為真正停車否則視為傳感器噪聲做平滑處理。第二個坑是數(shù)據(jù)的時間戳對齊。CAN總線上車速信號和GPS信號、輪速信號往往是不同周期、不同延遲的如果不做統(tǒng)一插值對齊模型學(xué)到的根本是錯位的映射關(guān)系。這個項目里我統(tǒng)一用重采樣把不同信號對齊到60ms的網(wǎng)格上插值方式選擇線性插值然后進入后續(xù)的特征提取環(huán)節(jié)。3.2 訓(xùn)練樣本的構(gòu)造滑動窗口的正確玩法車速預(yù)測是一個監(jiān)督學(xué)習(xí)任務(wù)但原始數(shù)據(jù)是一長串連續(xù)的車速時間序列不能直接扔進模型。標準做法是用滑動窗口切出“輸入-目標”樣本對每次取出輸入時域長度的窗口作為輸入緊接著后面的預(yù)測時域長度的窗口作為標簽然后窗口滑動一個步長繼續(xù)取下一個樣本。這里有個容易忽視的細節(jié)窗口滑動步長。如果步長過小比如1個時間步樣本之間高度重疊訓(xùn)練集數(shù)據(jù)冗余不僅訓(xùn)練慢還會導(dǎo)致過擬合。如果步長過大樣本量太少模型學(xué)不透。我當(dāng)時取的是5個時間步對應(yīng)300ms的滑動間隔既能保證足夠的樣本量又不會讓樣本之間的相關(guān)性高到影響泛化。數(shù)據(jù)歸一化也是一個重點。車速的數(shù)值范圍可能從0到120km/h甚至更高如果不歸一化就直接送入RBF網(wǎng)絡(luò)高斯基函數(shù)的距離計算會被大數(shù)值維度主導(dǎo)。我用的是min-max歸一化到[0,1]區(qū)間訓(xùn)練完成后預(yù)測出的值再反歸一化回真實車速。注意歸一化的最值必須用訓(xùn)練集的統(tǒng)計量不能用整個數(shù)據(jù)集的最值否則會引入未來信息造成評估結(jié)果虛高。3.3 數(shù)據(jù)集劃分按時間切不是隨機切時序預(yù)測任務(wù)里最容易犯的一個錯誤就是隨機打亂數(shù)據(jù)后再劃分訓(xùn)練集和測試集。車速序列是強相關(guān)的時序數(shù)據(jù)前一段和后一段存在明顯的時間關(guān)聯(lián)性隨機劃分會讓模型在訓(xùn)練階段“偷看”到未來數(shù)據(jù)測試精度虛高但部署到實車上效果立刻打回原形。正確的做法是按時間順序劃分前70%的數(shù)據(jù)做訓(xùn)練中間10%做驗證用來調(diào)超參數(shù)最后20%做測試。而且測試集必須是模型完全沒見過的一段連續(xù)車速片段。我當(dāng)時特意選了一段包含起步、加速、勻速、減速、停車等完整工況的片段作為測試只為了驗證模型在典型駕駛循環(huán)里的真實預(yù)測能力。4. 實操復(fù)現(xiàn)從零搭建RBF車速預(yù)測模型4.1 完整代碼實現(xiàn)Python我用Python和NumPy實現(xiàn)了整個RBF車速預(yù)測模型不依賴重型深度學(xué)習(xí)框架這樣在工程部署時也更靈活。核心部分包括K均值聚類確定中心、計算基函數(shù)寬度、最小二乘法求輸出層權(quán)重、前向預(yù)測。下面這段是核心訓(xùn)練和預(yù)測的完整實現(xiàn)注釋里標注了關(guān)鍵參數(shù)的含義。import numpy as np from sklearn.cluster import KMeans def rbf_gaussian(x, centers, widths): 計算RBF高斯基函數(shù)輸出 x: (n_samples, n_features) centers: (n_centers, n_features) widths: (n_centers,) # 利用矩陣運算直接計算距離平方 x2 np.sum(x**2, axis1, keepdimsTrue) c2 np.sum(centers**2, axis1, keepdimsTrue) dist2 x2 c2.T - 2 * np.dot(x, centers.T) return np.exp(-dist2 / (2 * widths**2)) def train_rbf(X_train, Y_train, K120): RBF神經(jīng)網(wǎng)絡(luò)訓(xùn)練 X_train: (n_samples, 輸入時域) Y_train: (n_samples, 預(yù)測時域) K: 隱含層節(jié)點數(shù) # 第一步K均值聚類確定徑向基中心 kmeans KMeans(n_clustersK, random_state42, n_init10).fit(X_train) centers kmeans.cluster_centers_ # (K, n_features) # 第二步計算寬度——取最近兩個中心距離的平均值再乘系數(shù) # 避免過小導(dǎo)致過擬合避免過大導(dǎo)致失去局部性 from scipy.spatial.distance import cdist dist cdist(centers, centers) np.fill_diagonal(dist, np.inf) min_dist dist.min(axis1) # 更穩(wěn)健的做法最近鄰距離的0.5~1.5倍 widths min_dist * 0.8 # 第三步計算隱含層輸出矩陣 H H_train rbf_gaussian(X_train, centers, widths) # (n_samples, K) # 第四步最小二乘法求輸出層權(quán)重帶L2正則項 # 正則項 lambda 用于抑制過擬合經(jīng)典嶺回歸思路 lam 0.01 HtH H_train.T H_train lam * np.eye(K) W np.linalg.solve(HtH, H_train.T Y_train) # (K, n_output) return centers, widths, W def predict_rbf(X_new, centers, widths, W): 前向預(yù)測 H_new rbf_gaussian(X_new, centers, widths) Y_pred H_new W # 對于多步預(yù)測用單步輸出直接拼接推理一次即可 return Y_pred if __name__ __main__: # 模擬車速數(shù)據(jù)演示真實項目替換為CAN采集數(shù)據(jù) np.random.seed(0) total_len 50000 t np.arange(total_len) * 0.06 # 60ms采樣周期 # 生成一段含加速/勻速/減速的模擬車速實際數(shù)據(jù)用真實數(shù)據(jù)替代 v 50 20*np.sin(0.02*t) 5*np.random.randn(total_len) v np.clip(v, 0, 120) # 參數(shù)設(shè)置 input_steps 160 # 過去9.6秒 pred_steps 50 # 未來3秒 stride 5 # 滑窗步長 # 構(gòu)造樣本 X, Y [], [] for i in range(0, total_len - input_steps - pred_steps, stride): X.append(v[i:iinput_steps]) Y.append(v[iinput_steps:iinput_stepspred_steps]) X np.array(X); Y np.array(Y) # 歸一化 v_min, v_max v.min(), v.max() X_norm (X - v_min) / (v_max - v_min) Y_norm (Y - v_min) / (v_max - v_min) # 按時間順序劃分數(shù)據(jù)集 split1 int(0.7 * len(X_norm)) split2 int(0.8 * len(X_norm)) X_tr, Y_tr X_norm[:split1], Y_norm[:split1] X_val, Y_val X_norm[split1:split2], Y_norm[split1:split2] X_te, Y_te X_norm[split2:], Y_norm[split2:] # 訓(xùn)練 centers, widths, W train_rbf(X_tr, Y_tr, K120) # 驗證與測試 def mae(y_true, y_pred): return np.mean(np.abs(y_true - y_pred), axis1) val_mae np.mean(mae(Y_val, predict_rbf(X_val, centers, widths, W))) test_mae np.mean(mae(Y_te, predict_rbf(X_te, centers, widths, W))) print(f驗證集MAE(歸一化域): {val_mae:.4f}) print(f測試集MAE(歸一化域): {test_mae:.4f}) # 換算回km/h均值 print(f測試集MAE(實際域): {test_mae*(v_max-v_min) v_min:.2f} km/h)4.2 幾個關(guān)鍵參數(shù)如何拍定隱含層節(jié)點數(shù)K和預(yù)測誤差之間存在典型的學(xué)習(xí)曲線關(guān)系。我實際掃了幾組K值K80時誤差明顯偏大K120時誤差顯著下降K180后誤差下降幅度變得非常平緩??紤]到隱含層節(jié)點數(shù)增加會線性增加計算量最后我把K定在了120誤差和開銷正好處在平衡點上。寬度計算方式中直接取“每個中心到最近其他中心距離的0.8倍”已經(jīng)是一個穩(wěn)妥起點。如果數(shù)據(jù)分布不均勻——比如低速工況樣本特別多、高速工況樣本極少——可以在聚類前對樣本做一次密度均勻化采樣可以減少中心扎堆在低速區(qū)的問題。正則項lambda的取值我推薦先從0開始試看驗證集誤差是否比訓(xùn)練集誤差高出很多。本項目中l(wèi)ambda0.01時收斂效果最好但這一項在不同數(shù)據(jù)規(guī)模下波動明顯需要配合驗證集調(diào)參不要直接照搬。4.3 預(yù)測效果評估不能只看一條曲線模型訓(xùn)練完后先看整體MAE指標濾除那些分不清是平穩(wěn)段誤差還是激烈加減速段誤差的平均值。我的經(jīng)驗是一定要把測試集按工況分段評估勻速段、小幅度跟車段、急剎段、起步段分別計算誤差這是最容易暴露模型短板的方法。實際項目里模型在勻速段的預(yù)測誤差基本在1km/h以內(nèi)跟車段2-3km/h急變道或急剎段誤差會到5km/h以上。這個不是模型不夠好而是劇烈工況本身隨機性強預(yù)測上限受限于物理規(guī)律。如果你在實車上要求每個時刻都精準預(yù)測兩三秒后的車速那不如直接去讀導(dǎo)航的交通流信息。另外做評估時要關(guān)注預(yù)測時域內(nèi)不同位置的誤差分布。通常近端誤差小、遠端誤差大這是合理的。如果出現(xiàn)近端誤差比遠端大那大概率是輸入時域太短或者數(shù)據(jù)對齊出了問題要優(yōu)先排查這兩個環(huán)節(jié)。5. 常見問題與排查技巧實錄5.1 訓(xùn)練速度極慢多半是中心初始化出了問題RBF網(wǎng)絡(luò)按理說訓(xùn)練應(yīng)該很快如果發(fā)現(xiàn)訓(xùn)半天還沒收斂通常是K值設(shè)太大或者中心初始化沒做好。K值超過500時矩陣求解開銷已經(jīng)很可觀了此時不如先降維——把輸入時域從160壓縮到80或者對輸入做PCA降維模型照樣能跑出差不多的精度。中心初始化還有一個常見問題是K均值聚類時隨機種子不穩(wěn)定。不同隨機種子可能聚類結(jié)果差異很大導(dǎo)致模型精度隨之波動。我的做法是多跑幾次K均值選訓(xùn)練誤差最小的那組中心作為最終初始化。這個trick簡單有效值得習(xí)慣性使用。5.2 預(yù)測值總是滯后一拍先檢查滑窗構(gòu)造滯后是時序預(yù)測里最常見的現(xiàn)象很多人第一反應(yīng)是“模型不夠好換更復(fù)雜的網(wǎng)絡(luò)”但實際上大多數(shù)情況是滑窗構(gòu)造的問題。如果滑動步長過大或者輸入時域太短模型就沒有足夠的信息去預(yù)測未來輸出的最佳策略就是“復(fù)讀最近的值”表現(xiàn)出來就是滯后。驗證方法很簡單把輸入時域翻倍比如從160個步長增加到320個看滯后是否改善。如果改善了說明信息量不足加大輸入時域或者減小滑動步長。如果沒改善那再考慮換模型。我項目中把輸入時域從160增加到240后遠端預(yù)測誤差下降約15%但訓(xùn)練時間上升了近半所以最終選擇了160-200之間的折中區(qū)間。5.3 測試集上精度高、實車上一塌糊涂這類問題十有八九出在訓(xùn)練/測試集劃分上。如果數(shù)據(jù)劃分時不小心用了全套數(shù)據(jù)的統(tǒng)計量做歸一化那模型就在測試集上“作弊”了。再有一個常見問題就是采集數(shù)據(jù)的路段工況單一——訓(xùn)練數(shù)據(jù)都是通暢路段測試時遇到擁堵工況分布漂移直接讓模型失效。正確的姿態(tài)是做完離線評估后采集一段完全獨立的路譜不同時間、不同路段、不同駕駛風(fēng)格重新驗證。哪怕只跑一次也比一萬次隨機劃分的離線指標更有說服力。RBF網(wǎng)絡(luò)雖然泛化能力尚可但它不是萬能的工況覆蓋度決定模型上限。5.4 預(yù)測結(jié)果曲線抖動劇烈如果預(yù)測出的車速曲線毛刺多、抖動明顯先別懷疑模型結(jié)構(gòu)的擬合能力大概率是輸入數(shù)據(jù)本身噪聲大。車速信號雖然看起來平滑但原始CAN數(shù)據(jù)的量化噪聲和毛刺一直都在。解決方式是在預(yù)處理階段做輕量平滑我用的是一階低通濾波截止頻率大約0.5Hz能把噪聲壓下去但不會把真實的加減速信息抹掉。注意不要用那種高強度的滑動平均會把急加速的響應(yīng)變得遲鈍。也可以在模型輸出側(cè)加一個約束——比如限制相鄰預(yù)測點的最大變化量前提是車輛物理上不可能在60ms內(nèi)實現(xiàn)超過某個加速度上限的變化。這種基于物理常識的后處理能顯著提升預(yù)測結(jié)果在控制器里的可用性。6. 工程部署與后續(xù)擴展方向6.1 模型更新策略在線還是離線重訓(xùn)RBF網(wǎng)絡(luò)訓(xùn)練快所以完全可以在線更新。當(dāng)新一批車速數(shù)據(jù)積累到一定量就用滑動窗口重訓(xùn)一次小模型替換掉舊模型的中心和權(quán)重。我實際測試過在線更新的頻率不需要太高每5到10分鐘更新一次即可。車速預(yù)測的底層模式短時間內(nèi)不會有劇烈變化頻繁更新反而可能引入抖動。離線部署時模型參數(shù)就是三個矩陣中心矩陣、寬度向量、輸出層權(quán)重全部是數(shù)值型數(shù)組??梢杂肅/C在MCU上實現(xiàn)推理過程只有一次高斯函數(shù)計算和一次矩陣乘不需要外部依賴這對實時性要求高的場景特別友好。6.2 從單點預(yù)測到多模型融合的方向RBF車速預(yù)測模型作為基礎(chǔ)預(yù)測器已經(jīng)完成但更復(fù)雜的項目里可以沿三個方向擴展第一個方向是引入外部信息。單靠歷史車速永遠無法預(yù)知前方紅綠燈、前車意圖、導(dǎo)航限速變化。把地圖導(dǎo)航的限速、坡度、路口信息編碼后作為額外輸入特征可以在長預(yù)測時域內(nèi)顯著降低誤差。第二個方向是多步滾動預(yù)測。當(dāng)前模型是一次性輸出未來所有時刻的車速實際使用中更可靠的方式是滾動預(yù)測每過一個時間步用最新車速數(shù)據(jù)重新預(yù)測未來時域這樣模型始終基于最新狀態(tài)魯棒性更好。第三個方向是跟LSTM融合。在短時域0到3秒用RBF因為它的局部逼近特性對近端變化敏感且響應(yīng)快在長時域10秒以上用LSTM捕捉駕駛風(fēng)格的周期性規(guī)律?;旌辖Y(jié)構(gòu)比單一模型復(fù)雜但這兩個模型的優(yōu)點正好互補適合對預(yù)測效果要求極高的上層決策。6.3 實車跑通之后的認知預(yù)測模型的意義實車測試中我發(fā)現(xiàn)預(yù)測模型的價值不在于“猜得多準”而在于給控制策略一個比“當(dāng)前狀態(tài)反饋”更好的決策基礎(chǔ)。哪怕預(yù)測誤差有2-3km/h控制器已經(jīng)能提前調(diào)整發(fā)動機扭矩或者電機回收力矩體驗和能耗都會有一個可感知的改善。做預(yù)測模型時不要陷入“必須預(yù)測得非常準”的心態(tài)先用起來再在迭代中逐步優(yōu)化。7. 最后說說我踩過的一些“坑外坑”關(guān)于這個項目如果要我壓縮成幾句話給后來的人我首先會說數(shù)據(jù)預(yù)處理和樣本構(gòu)造的優(yōu)先級遠高于模型結(jié)構(gòu)調(diào)優(yōu)。RBF網(wǎng)絡(luò)的原理并不復(fù)雜復(fù)雜的是如何把真實的、臟的、亂采的車速數(shù)據(jù)處理成模型能用的高質(zhì)量樣本。凡是模型效果不理想的情況先回頭檢查數(shù)據(jù)和滑窗再懷疑模型本身。其次K值和寬度的調(diào)參不要純靠交叉驗證死循環(huán)。畫出曲線、看趨勢、理解每個參數(shù)在物理意義上的作用比隨機網(wǎng)格搜索效率高得多。我身邊有不少開發(fā)者在調(diào)參上耗了數(shù)周、最后發(fā)現(xiàn)只是初始中心選不好換一組就全通了。這類問題早點遇到早點頓悟后面會順很多。最后再說一句。模型做完只是第一步寫清楚數(shù)據(jù)格式、參數(shù)范圍和預(yù)設(shè)場景同樣重要。把這個RBF車速預(yù)測模型交付給同事做實車集成時我們額外寫了一份參數(shù)設(shè)置說明標注了K值、寬度系數(shù)在不同車型或不同駕駛風(fēng)格下的推薦區(qū)間。這份說明后來在項目聯(lián)調(diào)階段節(jié)省了大量溝通成本。別小看這些收尾工作它和模型本身一樣決定這個項目能不能真正落地跑起來。