日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sklearn之线性回归实现—阿里云天池二手车交易价格预测赛

發(fā)布時間:2023/12/18 编程问答 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sklearn之线性回归实现—阿里云天池二手车交易价格预测赛 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近整理了線性回歸的原理及代碼實現(xiàn),想要用實際數(shù)據(jù)來測試模型,正好看到阿里云天池數(shù)據(jù)賽正在進(jìn)行二手車交易價格預(yù)測算法賽,正好能用線性回歸模型進(jìn)行預(yù)測,就在這里分享一下代碼。

一、賽題介紹

賽題以預(yù)測二手車的交易價格為任務(wù),該數(shù)據(jù)來自某交易平臺的二手車交易記錄,總數(shù)據(jù)量超過40w,包含31列變量信息,其中15列為匿名變量。其中抽取15萬條作為訓(xùn)練集,5萬條作為測試集A,5萬條作為測試集B。

特征如下:

二、數(shù)據(jù)預(yù)處理

數(shù)據(jù)預(yù)處理是跑模型之前最重要的一步,做好預(yù)處理,模型也就成功了一半。

import pandas as pd import numpy as np data=pd.read_csv('./train.csv',encoding='big5') #讀取訓(xùn)練集 data=data.iloc[:,2:] #只取有用字段

為了方便讀取數(shù)據(jù),我將原始數(shù)據(jù)中price(價格)字段移到最后一列。

x_data=data.iloc[:,:28] #取特征字段 y_data=data.iloc[:,28] #取目標(biāo)值price字段 x=np.array(x_data.values.tolist()) #將數(shù)據(jù)展開成二維數(shù)據(jù) y=np.array(y_data.values.tolist()) #將數(shù)據(jù)展開成二維數(shù)據(jù)

在進(jìn)行預(yù)處理之前,先做特征分析,看看各個特征的分布。
查看數(shù)據(jù)的特征字段名稱:

data.columns #查看數(shù)據(jù)的特征字段名稱


查看該特征數(shù)據(jù)分布:

from scipy import stats vatt='kilometer' stats.mode(data[vatt]) #查看該特征眾數(shù) data[vatt].describe() #查看該特征數(shù)據(jù)分布


作特征數(shù)據(jù)分布圖:

import seaborn as sns sns.distplot(data[vatt]) #該特征分布圖


與Y值做散點圖:

import matplotlib.pyplot as plt var = 'price' data_x = pd.concat([data[var],data[vatt]], axis=1) data_x.plot.scatter(x=vatt, y=var, ylim=(0,800)) #與Y值做散點圖


對所有特征數(shù)據(jù)做歸一化,保持特征量綱統(tǒng)一。

mean_x = np.mean(x, axis = 0) std_x = np.std(x, axis = 0) for i in range(len(x)):for j in range(len(x[0])): if std_x[j] != 0:x[i][j] = (x[i][j] - mean_x[j]) / std_x[j]

將訓(xùn)練集按8:2比例分為組內(nèi)訓(xùn)練集與測試集,測試模型訓(xùn)練效果。

import math x_train_set = x[: math.floor(len(x) * 0.9), :] y_train_set = y[: math.floor(len(y) * 0.9)] x_validation = x[math.floor(len(x) * 0.9): , :] y_validation = y[math.floor(len(y) * 0.9):]

三、線性回歸模型代碼實現(xiàn)

我嘗試直接利用手寫線性回歸算法代碼實現(xiàn)模型訓(xùn)練。

dim = 28+1 #之所以+1是留出誤差項b的位置 w = np.ones([dim, 1]) #w就是待學(xué)習(xí)參數(shù) x_1 = np.concatenate((np.ones([len(x_train_set), 1]), x_train_set), axis = 1).astype(float) learning_rate = 100 #初始化學(xué)習(xí)率設(shè)置為100 iter_time = 1000 #訓(xùn)練次數(shù)為1000次 adagrad = np.zeros([dim, 1]) #adagrad自適應(yīng)學(xué)習(xí)率方法 eps = 0.0000000001 #adagrad中防止分母為0的極小值 for t in range(iter_time):loss = np.sqrt(np.sum(np.power(np.dot(x_1, w) - y,2)) / len(x_train_set)) #損失函數(shù)if(t%100==0): #每隔100次輸出一次誤差值print(str(t) + ":" + str(loss))gradient = 2 * np.dot(x_1.transpose(), np.dot(x_1, w) - y) ##計算的梯度adagrad=adagrad+gradient ** 2 w = w - learning_rate * gradient / np.sqrt(adagrad + eps) #更新w的值

結(jié)果遇到報錯"MemoryError: Unable to allocate 151. GiB for an array with shape (135000, 150000) and data type float64" ,意思就是待訓(xùn)練矩陣過大導(dǎo)致內(nèi)存不足無法計算。
在嘗試盡量縮小訓(xùn)練數(shù)據(jù)量后,發(fā)現(xiàn)計算機最多只能計算數(shù)千條數(shù)據(jù),我轉(zhuǎn)而求助sklearn包來實現(xiàn)線性回歸。

四、sklearn代碼實現(xiàn)

sklearn是目前python中十分流行的用來實現(xiàn)機器學(xué)習(xí)的第三方包,其中包含了多種常見算法如:決策樹,邏輯回歸、集成算法(如隨機森林)等等。

用sklearn實現(xiàn)多元線性回歸:

參數(shù) fit_intercept,選擇是否需要計算截距,默認(rèn)為True;
參數(shù) normalize,選擇是否需要標(biāo)準(zhǔn)化(中心化),默認(rèn)為false;

from sklearn import linear_model reg=linear_model.LinearRegression(fit_intercept=True,normalize=True) model=reg.fit(x_train_set,y_train_set) #建模 k=reg.coef_ #模型參數(shù)w b=reg.intercept_ #模型截距b k


預(yù)測組內(nèi)測試集,查看均方誤差大小。

y_pred=reg.predict(x_validation) metrics.mean_squared_error(y_validation, y_pred)

作圖查看預(yù)測效果,數(shù)據(jù)集數(shù)據(jù)量太大,只取前100個預(yù)測結(jié)果查看擬合效果:

y_pred_p=y_pred[:100] #取預(yù)測結(jié)果 y_train_set_p=y_validation[:100] #取組內(nèi)測試集結(jié)果 plt.figure(dpi=100) plt.plot(range(len(y_pred_p)),y_pred_p,'b',label="predict") plt.plot(range(len(y_train_set_p)),y_train_set_p,'r',label="test")

可以看到預(yù)測結(jié)果大體上還是和測試集相符的:

五、比賽得分

將訓(xùn)練的模型用于待預(yù)測數(shù)據(jù)集,輸出結(jié)果提交到比賽中。

testdata = pd.read_csv('./test.csv', encoding='big5') test_data = testdata.iloc[:, 2:] test_x = np.array(test_data.values.tolist()) # 將其轉(zhuǎn)換為數(shù)組 # 下面是Normalize,且必須跟training data是同一種方法進(jìn)行Normalize for i in range(len(test_x)): #12 * 471for j in range(len(test_x[0])): #18 * 9 if std_x[j] != 0:test_x[i][j] = (test_x[i][j] - mean_x[j]) / std_x[j]

預(yù)測結(jié)果:

y_pred_test=reg.predict(test_x)

將結(jié)果輸出到csv文件中:

import csv with open('./result.csv', mode='w', newline='') as submit_file:csv_writer = csv.writer(submit_file)header = ['SaleID', 'price']print(header)csv_writer.writerow(header)for i in range(50000):if y_pred_test[i]<0 :y_pred_test[i]=0 #如果預(yù)測結(jié)果小于0,就為0,因為價格不可能小于0row = [str(i+150000), y_pred_test[i]]csv_writer.writerow(row)print(row)

以下為提交結(jié)果后獲得的誤差分?jǐn)?shù)與排名,可以看到和其他人提交的結(jié)果還是有很大差距的。

六、模型優(yōu)化

面對不佳的預(yù)測效果,我回頭檢查數(shù)據(jù)發(fā)現(xiàn)了一些數(shù)據(jù)缺失和數(shù)據(jù)移位的問題,進(jìn)行數(shù)據(jù)補齊后重新訓(xùn)練模型,但預(yù)測分?jǐn)?shù)沒有得到顯著提升。

于是我思考基于sklearn優(yōu)化現(xiàn)有線性回歸模型。

(1) 嶺回歸

嶺回歸在損失函數(shù)中增加了正則項,也叫L2范數(shù),以限制模型參數(shù)對異常樣本的匹配程度,進(jìn)而提高模型面對多數(shù)正常樣本的擬合精度。

from sklearn.linear_model import Ridge,RidgeCV Lambdas=np.logspace(-0.5,1,5) #構(gòu)造不同的lambda值#設(shè)置交叉驗證的參數(shù),使用均方誤差評估 ridge_cv=RidgeCV(alphas=Lambdas,normalize=True,scoring='neg_mean_squared_error',cv=10) ridge_cv.fit(x_train_set,y_train_set)#基于最佳lambda值建模 ridge=Ridge(alpha=ridge_cv.alpha_,normalize=True) ridge.fit(x_train_set,y_train_set)#輸出預(yù)測結(jié)果 ridge_pred=ridge.predict(x_validation)#評估模型效果 MSE=metrics.mean_squared_error(y_validation,ridge_pred) print(MSE)

提交比賽結(jié)果后,模型預(yù)測表現(xiàn)沒有得到顯著提升。
(2)LASSO回歸

嶺回歸無法剔除變量,而LASSO回歸模型,將懲罰項由L2范數(shù)變?yōu)長1范數(shù),可以將一些不重要的回歸系數(shù)縮減為0,達(dá)到剔除變量的目的。

from sklearn.linear_model import Lasso,LassoCV Lambdas=np.logspace(-0.5,1,2)#設(shè)置交叉驗證的參數(shù),使用均方誤差評估 lasso_cv=LassoCV(alphas=Lambdas,normalize=True,cv=10,max_iter=10000) lasso_cv.fit(x_train_set,y_train_set)#基于最佳lambda值建模 lasso=Lasso(alpha=lasso_cv.alpha_,normalize=True,max_iter=10000) lasso.fit(x_train_set,y_train_set)#輸出預(yù)測結(jié)果 lasso_pred=lasso.predict(x_validation)#評估模型效果 MSE=metrics.mean_squared_error(y_validation,lasso_pred) print(MSE)

提交比賽結(jié)果后,模型預(yù)測表現(xiàn)沒有得到顯著提升。

至此,線性回歸模型在二手車交易價格預(yù)測賽中的代碼如上。

小記:
1、線性回歸在sklearn上實現(xiàn)即方便又快速。
2、我看到二手車交易價格預(yù)測賽論壇中,排名靠前的模型都是神經(jīng)網(wǎng)絡(luò)實現(xiàn)的,下一步我將用神經(jīng)網(wǎng)絡(luò)框架實現(xiàn)價格預(yù)測模型,對比現(xiàn)有模型效果。

總結(jié)

以上是生活随笔為你收集整理的sklearn之线性回归实现—阿里云天池二手车交易价格预测赛的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国内自拍视频在线播放 | 日韩女同一区二区三区 | 在线只有精品 | 农民工hdxxxx性中国 | 日韩精品一区二区三区在线 | 午夜刺激视频 | aaa人片在线 | 超碰在线人人 | 亚洲av无码精品一区二区 | 黄片毛片在线免费观看 | 白浆在线 | 女人囗交吞精囗述 | 九九九亚洲| 一级黄色大片 | 亚洲看 | 久久久国产成人 | 久久亚洲av永久无码精品 | 欧美午夜精品久久久久久浪潮 | 亚洲精品视频网 | 国产免费的av | 国产麻豆精品在线观看 | jiizzyou性欧美老片 | 成人激情小视频 | 免费无码国产v片在线观看 三级全黄做爰在线观看 | 一区二区免费在线 | 日韩在线一卡二卡 | 日本捏奶吃奶的视频 | av.www| 午夜精品久久久久久久久久久 | 美女脱裤子打屁股 | 国产一二在线 | 欧美特级a| 日本黄色精品 | 欧美成人天堂 | 日本色偷偷| 青青草成人av | 超碰2019| 日韩美女视频一区二区 | 手机在线观看av网站 | 在线视频这里只有精品 | 韩国美女一区二区 | 99资源| 捆绑调教视频网站 | 欧美做受xxxxxⅹ性视频 | 日韩一级片在线播放 | 日本在线中文字幕专区 | 精久久久久 | 日本黄网站 | 精品人人妻人人澡人人爽牛牛 | 美国式禁忌1980 | 亚洲精品国产精品国自产观看 | 亚洲av永久无码精品放毛片 | 穿越异世荒淫h啪肉np文 | 成人尤物| 精品在线不卡 | 影音先锋男人资源网站 | 狠狠做深爱婷婷久久综合一区 | 伊人成人在线视频 | 欧美aaa级片| 久久九九精品视频 | 黄色麻豆视频 | av电影在线观看 | av免费观看网址 | 91精品一区二区三 | 日韩三级大片 | 国产农村熟妇videos | 国产伦精品一区二区三区免费 | 欧美经典一区 | 美女网站免费观看视频 | 欧美影音| 色网站免费 | 日韩天堂在线观看 | 激情五月开心婷婷 | 成人h动漫精品一区二区器材 | 欧美日韩亚洲国产另类 | 久久精品无码人妻 | 久久精品福利视频 | 97se综合| 无码人妻精品一区二区三应用大全 | 日本涩涩网站 | 日韩少妇裸体做爰视频 | 黄色成年人视频 | 中国a级黄色片 | 日韩jizz | 免费看国产曰批40分钟粉红裤头 | 亚洲自拍偷拍一区二区三区 | 国产一区视频在线观看免费 | 亚洲欧美日韩在线播放 | 综合色88 | 日本免费一区二区三区最新 | 99热8| 一级黄色美女 | 99riav国产| 毛片大全 | 哪里可以看毛片 | 青青青在线免费观看 | 亚洲视频欧美 | 久久国产精品免费观看 | 久久精品牌麻豆国产大山 |