當前位置:首頁 » 編程語言 » python回歸源碼

python回歸源碼

發布時間: 2023-12-01 07:08:10

① 如何用python進行線性回歸以及誤差分析

數據挖掘中的預測問題通常分為2類:回歸與分類。

簡單的說回歸就是預測數值,而分類是給數據打上標簽歸類。

本文講述如何用Python進行基本的數據擬合,以及如何對擬合結果的誤差進行分析。

本例中使用一個2次函數加上隨機的擾動來生成500個點,然後嘗試用1、2、100次方的多項式對該數據進行擬合。

擬合的目的是使得根據訓練數據能夠擬合出一個多項式函數,這個函數能夠很好的擬合現有數據,並且能對未知的數據進行預測。

代碼如下:

  • importmatplotlib.pyplot as plt

  • importnumpy as np

  • importscipy as sp

  • fromscipy.statsimportnorm

  • fromsklearn.pipelineimportPipeline

  • fromsklearn.linear_modelimportLinearRegression

  • fromsklearn.

  • fromsklearnimportlinear_model

  • ''''' 數據生成 '''

  • x = np.arange(0,1,0.002)

  • y = norm.rvs(0, size=500, scale=0.1)

  • y = y + x**2

  • ''''' 均方誤差根 '''

  • defrmse(y_test, y):

  • returnsp.sqrt(sp.mean((y_test - y) **2))

  • ''''' 與均值相比的優秀程度,介於[0~1]。0表示不如均值。1表示完美預測.這個版本的實現是參考scikit-learn官網文檔 '''

  • defR2(y_test, y_true):

  • return1- ((y_test - y_true)**2).sum() / ((y_true - y_true.mean())**2).sum()

  • ''''' 這是Conway&White《機器學習使用案例解析》里的版本 '''

  • defR22(y_test, y_true):

  • y_mean = np.array(y_true)

  • y_mean[:] = y_mean.mean()

  • return1- rmse(y_test, y_true) / rmse(y_mean, y_true)

  • plt.scatter(x, y, s=5)

  • degree = [1,2,100]

  • y_test = []

  • y_test = np.array(y_test)

  • fordindegree:

  • clf = Pipeline([('poly', PolynomialFeatures(degree=d)),

  • ('linear', LinearRegression(fit_intercept=False))])

  • clf.fit(x[:, np.newaxis], y)

  • y_test = clf.predict(x[:, np.newaxis])

  • print(clf.named_steps['linear'].coef_)

  • print('rmse=%.2f, R2=%.2f, R22=%.2f, clf.score=%.2f'%

  • (rmse(y_test, y),

  • R2(y_test, y),

  • R22(y_test, y),

  • clf.score(x[:, np.newaxis], y)))

  • plt.plot(x, y_test, linewidth=2)

  • plt.grid()

  • plt.legend(['1','2','100'], loc='upper left')

  • plt.show()

  • 該程序運行的顯示結果如下:

    [ 0. 0.75873781]

    rmse=0.15, R2=0.78, R22=0.53, clf.score=0.78

    [ 0. 0.35936882 0.52392172]

    rmse=0.11, R2=0.87, R22=0.64, clf.score=0.87

    [ 0.00000000e+00 2.63903249e-01 3.14973328e-01 2.43389461e-01

    1.67075328e-01 1.10674280e-01 7.30672237e-02 4.88605804e-02

    ......

    3.70018540e-11 2.93631291e-11 2.32992690e-11 1.84860002e-11

    1.46657377e-11]

    rmse=0.10, R2=0.90, R22=0.68, clf.score=0.90

② 求python多元支持向量機多元回歸模型最後預測結果導出代碼、測試集與真實值R2以及對比圖代碼

這是一個多元支持向量機回歸的模型,以下是一個參考的實現代碼:
import numpy as npimport matplotlib.pyplot as pltfrom sklearn import svmfrom sklearn.metrics import r2_score
# 模擬數據
np.random.seed(0)
X = np.sort(5 * np.random.rand(80, 1), axis=0)
y = np.sin(X).ravel()
y[::5] += 3 * (0.5 - np.random.rand(16))
# 分割數據
train_X = X[:60]
train_y = y[:60]
test_X = X[60:]
test_y = y[60:]
# 模型訓練
model = svm.SVR(kernel='rbf', C=1e3, gamma=0.1)
model.fit(train_X, train_y)
# 預測結果
pred_y = model.predict(test_X)# 計算R2r2 = r2_score(test_y, pred_y)
# 對比圖
plt.scatter(test_X, test_y, color='darkorange', label='data'指敏)
plt.plot(test_X, pred_y, color='navy', lw=2, label='SVR model')
plt.title('R2={:.2f}'.format(r2))
plt.legend()
plt.show()
上面的代碼將數據分為訓練數據和測試數據,使用SVR模型對訓練唯配枝數據進行訓練,然後對測試數據進行預測。計算預測結果與真實值的R2,最後賣逗將結果畫出對比圖,以評估模型的效果。

③ python多元線性回歸怎麼計算

1、什麼是多元線性回歸模型?

當y值的影響因素不唯一時,採用多元線性回歸模型。

y =y=β0+β1x1+β2x2+...+βnxn

例如商品的銷售額可能不電視廣告投入,收音機廣告投入,報紙廣告投入有關系,可以有 sales =β0+β1*TV+β2* radio+β3*newspaper.

2、使用pandas來讀取數據

pandas 是一個用於數據探索、數據分析和數據處理的python庫

[python]view plain

  • importpandasaspd


  • [html]view plain

  • <prename="code"class="python">#

  • data=pd.read_csv('/home/lulei/Advertising.csv')

  • #displaythefirst5rows

  • data.head()

  • 這里的Advertising.csv是來自Advertising.csv。大家可以自己下載。
  • 上面代碼的運行結果:

  • TV Radio Newspaper Sales

  • 0 230.1 37.8 69.2 22.1

  • 1 44.5 39.3 45.1 10.4

  • 2 17.2 45.9 69.3 9.3

  • 3 151.5 41.3 58.5 18.5

  • 4 180.8 10.8 58.4 12.9


  • 上面顯示的結果類似一個電子表格,這個結構稱為Pandas的數據幀(data frame),類型全稱:pandas.core.frame.DataFrame.

    pandas的兩個主要數據結構:Series和DataFrame:

  • Series類似於一維數組,它有一組數據以及一組與之相關的數據標簽(即索引)組成。

  • DataFrame是一個表格型的數據結構,它含有一組有序的列,每列可以是不同的值類型。DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典。


  • [python]view plain

  • #displaythelast5rows

  • data.tail()

  • 只顯示結果的末尾5行
  • TV Radio Newspaper Sales

  • 195 38.2 3.7 13.8 7.6

  • 196 94.2 4.9 8.1 9.7

  • 197 177.0 9.3 6.4 12.8

  • 198 283.6 42.0 66.2 25.5

  • 199 232.1 8.6 8.7 13.4

  • [html]view plain

  • #checktheshapeoftheDataFrame(rows,colums)

  • data.shape

  • 查看DataFrame的形狀,注意第一列的叫索引,和資料庫某個表中的第一列類似。
  • (200,4)

    3、分析數據

    特徵:

  • TV:對於一個給定市場中單一產品,用於電視上的廣告費用(以千為單位)

  • Radio:在廣播媒體上投資的廣告費用

  • Newspaper:用於報紙媒體的廣告費用

  • 響應:

  • Sales:對應產品的銷量

  • 在這個案例中,我們通過不同的廣告投入,預測產品銷量。因為響應變數是一個連續的值,所以這個問題是一個回歸問題。數據集一共有200個觀測值,每一組觀測對應一個市場的情況。

    注意:這里推薦使用的是seaborn包。網上說這個包的數據可視化效果比較好看。其實seaborn也應該屬於matplotlib的內部包。只是需要再次的單獨安裝。

    [python]view plain

  • importseabornassns

  • importmatplotlib.pyplotasplt

  • #ots

  • sns.pairplot(data,x_vars=['TV','Radio','Newspaper'],y_vars='Sales',size=7,aspect=0.8)

  • plt.show()#注意必須加上這一句,否則無法顯示。

  • [html]view plain

  • 這里選擇TV、Radio、Newspaper作為特徵,Sales作為觀測值

  • [html]view plain

  • 返回的結果:



  • seaborn的pairplot函數繪制X的每一維度和對應Y的散點圖。通過設置size和aspect參數來調節顯示的大小和比例。可以從圖中看出,TV特徵和銷量是有比較強的線性關系的,而Radio和Sales線性關系弱一些,Newspaper和Sales線性關系更弱。通過加入一個參數kind='reg',seaborn可以添加一條最佳擬合直線和95%的置信帶。

  • [python]view plain

  • sns.pairplot(data,x_vars=['TV','Radio','Newspaper'],y_vars='Sales',size=7,aspect=0.8,kind='reg')

  • plt.show()


  • 結果顯示如下:

  • 直到這里整個的一次多元線性回歸的預測就結束了。

    6、改進特徵的選擇
    在之前展示的數據中,我們看到Newspaper和銷量之間的線性關系竟是負關系(不用驚訝,這是隨機特徵抽樣的結果。換一批抽樣的數據就可能為正了),現在我們移除這個特徵,看看線性回歸預測的結果的RMSE如何?

    依然使用我上面的代碼,但只需修改下面代碼中的一句即可:

    [python]view plain

  • #

  • feature_cols=['TV','Radio','Newspaper']

  • #

  • X=data[feature_cols]

  • #

  • #X=data[['TV','Radio','Newspaper']]#只需修改這里即可<prename="code"class="python"style="font-size:15px;line-height:35px;">X=data[['TV','Radio']]#去掉newspaper其他的代碼不變

  • # print the first 5 rowsprint X.head()# check the type and shape of Xprint type(X)print X.shape

  • 最後的到的系數與測度如下:

    LinearRegression(_X=True, fit_intercept=True, normalize=False)

  • 2.81843904823

  • [ 0.04588771 0.18721008]

  • RMSE by hand: 1.28208957507

  • 然後再次使用ROC曲線來觀測曲線的整體情況。我們在將Newspaper這個特徵移除之後,得到RMSE變小了,說明Newspaper特徵可能不適合作為預測銷量的特徵,於是,我們得到了新的模型。我們還可以通過不同的特徵組合得到新的模型,看看最終的誤差是如何的。
  • 備註:

  • 之前我提到了這種錯誤:
  • 註:上面的結果是由train_test_spilit()得到的,但是我不知道為什麼我的版本的sklearn包中居然報錯:

  • ImportError Traceback (most recent call last)<ipython-input-182-3eee51fcba5a> in <mole>() 1 ###構造訓練集和測試集----> 2 from sklearn.cross_validation import train_test_split 3 #import sklearn.cross_validation 4 X_train,X_test, y_train, y_test = train_test_split(X, y, random_state=1) 5 # default split is 75% for training and 25% for testingImportError: cannot import name train_test_split

  • 處理方法:1、我後來重新安裝sklearn包。再一次調用時就沒有錯誤了。

    2、自己寫函數來認為的隨機構造訓練集和測試集。(這個代碼我會在最後附上。)

  • 這里我給出我自己寫的函數:
  • [python]view plain

  • importrandom

  • [python]view plain

  • <spanstyle="font-family:microsoftyahei;">######自己寫一個隨機分配數的函數,分成兩份,並將數值一次存儲在對應的list中##########

  • deftrain_test_split(ylabel,random_state=1):

  • importrandom

  • index=random.sample(range(len(ylabel)),50*random_state)

  • list_train=[]

  • list_test=[]

  • i=0

  • forsinrange(len(ylabel)):

  • ifiinindex:

  • list_test.append(i)

  • else:

  • list_train.append(i)

  • i+=1

  • returnlist_train,list_test

  • ###############對特徵進行分割#############################

  • feature_cols=['TV','Radio','Newspaper']

  • X1=data[feature_cols]

④ 求python支持向量機多元回歸預測代碼

這是一段用 Python 來實現 SVM 多元回歸預測的代碼示例:
# 導入相關核胡庫
from sklearn import datasets
from sklearn.svm import SVR
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 載入數據集
X, y = datasets.load_boston(return_X_y=True)
# 將數據集拆分為訓練集和測試改塌攔集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 創建SVM多元回歸模型
reg = SVR(C=1.0, epsilon=0.2)
# 訓練模型
reg.fit(X_train, y_train)
# 預測結果
y_pred = reg.predict(X_test)
# 計算均方誤差
mse = mean_squared_error(y_test, y_pred)
print("Mean Squared Error:", mse)
在這段代碼中,首先導入了相關的庫,包括 SVR 函數衫仔、train_test_split 函數和 mean_squared_error 函數。然後,使用 load_boston 函數載入數據集,並將數據集分為訓練集和測試集。接著,使用 SVR 函數創建了一個 SVM 多元回歸模型,並使用 fit 函數對模型進行訓練。最後,使用 predict 函數進行預測,並使用 mean_squared_error 函數計算均方誤差。
需要注意的是,這僅僅是一個示例代碼,在實際應用中,可能需要根據項目的需求進行更改,例如使用不同的超參數

⑤ python做邏輯回歸 怎麼把導入的數據分成x,y

簡介
本例子是通過對一組邏輯回歸映射進行輸出,使得網路的權重和偏置達到最理想狀態,最後再進行預測。其中,使用GD演算法對參數進行更新,損耗函數採取交叉商來表示,一共訓練10000次。
2.python代碼
#!/usr/bin/python

import numpy
import theano
import theano.tensor as T
rng=numpy.random

N=400
feats=784
# D[0]:generate rand numbers of size N,element between (0,1)
# D[1]:generate rand int number of size N,0 or 1
D=(rng.randn(N,feats),rng.randint(size=N,low=0,high=2))
training_steps=10000

# declare symbolic variables
x=T.matrix('x')
y=T.vector('y')
w=theano.shared(rng.randn(feats),name='w') # w is shared for every input
b=theano.shared(0.,name='b') # b is shared too.

print('Initial model:')
print(w.get_value())
print(b.get_value())

# construct theano expressions,symbolic
p_1=1/(1+T.exp(-T.dot(x,w)-b)) # sigmoid function,probability of target being 1
prediction=p_1>0.5
xent=-y*T.log(p_1)-(1-y)*T.log(1-p_1) # cross entropy
cost=xent.mean()+0.01*(w**2).sum() # cost function to update parameters
gw,gb=T.grad(cost,[w,b]) # stochastic gradient descending algorithm

#compile
train=theano.function(inputs=[x,y],outputs=[prediction,xent],updates=((w,w-0.1*gw),(b,b-0.1*gb)))
predict=theano.function(inputs=[x],outputs=prediction)

# train
for i in range(training_steps):
pred,err=train(D[0],D[1])

print('Final model:')
print(w.get_value())
print(b.get_value())
print('target values for D:')
print(D[1])
print('prediction on D:')
print(predict(D[0]))

print('newly generated data for test:')
test_input=rng.randn(30,feats)
print('result:')
print(predict(test_input))

3.程序解讀
如上面所示,首先導入所需的庫,theano是一個用於科學計算的庫。然後這里我們隨機產生一個輸入矩陣,大小為400*784的隨機數,隨機產生一個輸出向量大小為400,輸出向量為二值的。因此,稱為邏輯回歸。
然後初始化權重和偏置,它們均為共享變數(shared),其中權重初始化為較小的數,偏置初始化為0,並且列印它們。
這里我們只構建一層網路結構,使用的激活函數為logistic sigmoid function,對輸入量乘以權重並考慮偏置以後就可以算出輸入的激活值,該值在(0,1)之間,以0.5為界限進行二值化,然後算出交叉商和損耗函數,其中交叉商是代表了我們的激活值與實際理論值的偏離程度。接著我們使用cost分別對w,b進行求解偏導,以上均為符號表達式運算。
接著我們使用theano.function進行編譯優化,提高計算效率。得到train函數和predict函數,分別進行訓練和預測。
接著,我們對數據進行10000次的訓練,每次訓練都會按照GD演算法進行更新參數,最後我們得到了想要的模型,產生一組新的輸入,即可進行預測。

⑥ 如何用python實現含有虛擬自變數的回歸



參考資料:
DataRobot | Ordinary Least Squares in Python

DataRoboe | Multiple Regression using Statsmodels

AnalyticsVidhya | 7 Types of Regression Techniques you should know!



⑦ Python源碼是什麼意思

源代碼是指原始代碼,可以是任何語言代碼。Python源碼就是指編寫的最原始程序的代碼。運行的軟體是要經過編寫的,程序員編寫程序的過程中需要他們的「語言」。

熱點內容
c語言鏈表的排序 發布:2025-01-25 06:48:17 瀏覽:887
查看存儲空間的命令 發布:2025-01-25 06:40:06 瀏覽:610
安卓系統如何保活 發布:2025-01-25 06:36:27 瀏覽:779
緩存不退出 發布:2025-01-25 06:35:02 瀏覽:265
protel編譯 發布:2025-01-25 06:35:00 瀏覽:203
bt我的世界伺服器 發布:2025-01-25 06:33:35 瀏覽:392
桃子解壓碼 發布:2025-01-25 06:26:46 瀏覽:726
ubuntu飢荒伺服器搭建伺服器 發布:2025-01-25 06:19:54 瀏覽:51
安卓怎麼登錄蘋果碧藍航線 發布:2025-01-25 06:15:22 瀏覽:650
如何打開sqlserver2008 發布:2025-01-25 06:12:33 瀏覽:994