Ⅰ 如何用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做stepwise回歸
所說所有的變數都是對象。 對象在python里,其實是一個指針,指向一個數據結構,數據結構里有屬性,有方法。
對象通常就是指變數。從面向對象OO的概念來講,對象是類的一個實例。在python里很簡單,對象就是變數。
class A:
myname="class a"
上面就是一個類。不是對象
a=A()
這里變數a就是一個對象。
它有一個屬性(類屬性),myname,你可以顯示出來
print a.myname
所以,你看到一個變數後面跟點一個小數點。那麼小數點後面。
Ⅲ 如何用Python進行線性回歸以及誤差分析
線性回歸:
設x,y分別為一組數據,代碼如下
import matplotlib.pyplot as plt
import numpy as np
ro=np.polyfit(x,y,deg=1) #deg為擬合的多項式的次數(線性回歸就選1)
ry=np.polyval(ro,x) #忘記x和ro哪個在前哪個在後了。。。
print ro #輸出的第一個數是斜率k,第二個數是縱截距b
plt.scatter(x,y)
plt.plot(x,ry)
Ⅳ 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()
上面代碼的運行結果:
上面顯示的結果類似一個電子表格,這個結構稱為Pandas的數據幀(data frame),類型全稱:pandas.core.frame.DataFrame.
pandas的兩個主要數據結構:Series和DataFrame:
Series類似於一維數組,它有一組數據以及一組與之相關的數據標簽(即索引)組成。
DataFrame是一個表格型的數據結構,它含有一組有序的列,每列可以是不同的值類型。DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典。
[python]view plain
#displaythelast5rows
data.tail()
只顯示結果的末尾5行
[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
返回的結果:
[python]view plain
sns.pairplot(data,x_vars=['TV','Radio','Newspaper'],y_vars='Sales',size=7,aspect=0.8,kind='reg')
plt.show()
結果顯示如下:
4、線性回歸模型
優點:快速;沒有調節參數;可輕易解釋;可理解。
缺點:相比其他復雜一些的模型,其預測准確率不是太高,因為它假設特徵和響應之間存在確定的線性關系,這種假設對於非線性的關系,線性回歸模型顯然不能很好的對這種數據建模。
線性模型表達式:y=β0+β1x1+β2x2+...+βnxn其中
y是響應
β0是截距
β1是x1的系數,以此類推
在這個案例中:y=β0+β1∗TV+β2∗Radio+...+βn∗Newspaper
(1)、使用pandas來構建X(特徵向量)和y(標簽列)
scikit-learn要求X是一個特徵矩陣,y是一個NumPy向量。
pandas構建在NumPy之上。
因此,X可以是pandas的DataFrame,y可以是pandas的Series,scikit-learn可以理解這種結構。
[python]view plain
#
feature_cols=['TV','Radio','Newspaper']
#
X=data[feature_cols]
#
X=data[['TV','Radio','Newspaper']]
#printthefirst5rows
printX.head()
#checkthetypeandshapeofX
printtype(X)
printX.shape
輸出結果如下:
[python]view plain
#selectaSeriesfromtheDataFrame
y=data['Sales']
#
y=data.Sales
#printthefirst5values
printy.head()
輸出的結果如下:
(2)、構建訓練集與測試集
[html]view plain
<prename="code"class="python"><spanstyle="font-size:14px;">##構造訓練集和測試集
fromsklearn.cross_validationimporttrain_test_split#這里是引用了交叉驗證
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=1)
#default split is 75% for training and 25% for testing
[html]view plain
printX_train.shape
printy_train.shape
printX_test.shape
printy_test.shape
輸出結果如下:
註:上面的結果是由train_test_spilit()得到的,但是我不知道為什麼我的版本的sklearn包中居然報錯:
處理方法:1、我後來重新安裝sklearn包。再一次調用時就沒有錯誤了。
2、自己寫函數來認為的隨機構造訓練集和測試集。(這個代碼我會在最後附上。)
(3)sklearn的線性回歸
[html]view plain
fromsklearn.linear_modelimportLinearRegression
linreg=LinearRegression()
model=linreg.fit(X_train,y_train)
printmodel
printlinreg.intercept_
printlinreg.coef_
輸出的結果如下:
[html]view plain
#
zip(feature_cols,linreg.coef_)
輸出如下:
y=2.668+0.0464∗TV+0.192∗Radio-0.00349∗Newspaper
如何解釋各個特徵對應的系數的意義?
對於給定了Radio和Newspaper的廣告投入,如果在TV廣告上每多投入1個單位,對應銷量將增加0.0466個單位。就是加入其它兩個媒體投入固定,在TV廣告上每增加1000美元(因為單位是1000美元),銷量將增加46.6(因為單位是1000)。但是大家注意這里的newspaper的系數居然是負數,所以我們可以考慮不使用newspaper這個特徵。這是後話,後面會提到的。
(4)、預測
[python]view plain
y_pred=linreg.predict(X_test)
printy_pred
[python]view plain
printtype(y_pred)
輸出結果如下:
5、回歸問題的評價測度
(1) 評價測度
對於分類問題,評價測度是准確率,但這種方法不適用於回歸問題。我們使用針對連續數值的評價測度(evaluation metrics)。
這里介紹3種常用的針對線性回歸的測度。
1)平均絕對誤差(Mean Absolute Error, MAE)
(2)均方誤差(Mean Squared Error, MSE)
(3)均方根誤差(Root Mean Squared Error, RMSE)
這里我使用RMES。
[python]view plain
<prename="code"class="python">#計算Sales預測的RMSE
printtype(y_pred),type(y_test)
printlen(y_pred),len(y_test)
printy_pred.shape,y_test.shape
fromsklearnimportmetrics
importnumpyasnp
sum_mean=0
foriinrange(len(y_pred)):
sum_mean+=(y_pred[i]-y_test.values[i])**2
sum_erro=np.sqrt(sum_mean/50)
#calculateRMSEbyhand
print"RMSEbyhand:",sum_erro
最後的結果如下:
(2)做ROC曲線
[python]view plain
importmatplotlib.pyplotasplt
plt.figure()
plt.plot(range(len(y_pred)),y_pred,'b',label="predict")
plt.plot(range(len(y_pred)),y_test,'r',label="test")
plt.legend(loc="upperright")#顯示圖中的標簽
plt.xlabel("thenumberofsales")
plt.ylabel('valueofsales')
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)
然後再次使用ROC曲線來觀測曲線的整體情況。我們在將Newspaper這個特徵移除之後,得到RMSE變小了,說明Newspaper特徵可能不適合作為預測銷量的特徵,於是,我們得到了新的模型。我們還可以通過不同的特徵組合得到新的模型,看看最終的誤差是如何的。
備註:
之前我提到了這種錯誤:
註:上面的結果是由train_test_spilit()得到的,但是我不知道為什麼我的版本的sklearn包中居然報錯:
處理方法:1、我後來重新安裝sklearn包。再一次調用時就沒有錯誤了。
2、自己寫函數來認為的隨機構造訓練集和測試集。(這個代碼我會在最後附上。)
這里我給出我自己寫的函數:
Ⅳ 如何用神經網路實現連續型變數的回歸預測
神經網路最開始是機器學習的一種模型,但其訓練的時間和其他幾種模型相比不佔優勢,且結果也不盡人意,所以一直沒有被廣泛使用。但隨著數學的深入研究以及計算機硬體質量的提高,尤其是GPU的出現,給深度學習的廣泛應用提供了基礎。GPU最初是為了給游戲玩家帶來高質量的視覺體驗,由於其處理矩陣運算的能力特別優秀,也被用於深度學習中模型的訓練,以往數十天才能訓練好的模型在GPU上訓練幾天就可以訓練好,大大減少了深度學習的訓練時間,因而深度學習的應用越來越多。
通常使用Python來搭建神經網路,Python自帶深度學習的一些庫,在進行回歸預測時,我們只需用調用函數,設定幾個參數,如隱藏層層數和神經元個數等,剩下的就是等模型自行訓練,最終便能完成回歸預測,非常的方便。
Ⅵ 使用Python的線性回歸問題,怎麼解決
本文中,我們將進行大量的編程——但在這之前,我們先介紹一下我們今天要解決的實例問題。
1) 預測房子價格
閃電俠是一部由劇作家/製片人Greg Berlanti、Andrew Kreisberg和Geoff Johns創作,由CW電視台播放的美國電視連續劇。它基於DC漫畫角色閃電俠(Barry Allen),一個具有超人速度移動能力的裝扮奇特的打擊犯罪的超級英雄,這個角色是由Robert Kanigher、John Broome和Carmine Infantino創作。它是綠箭俠的衍生作品,存在於同一世界。該劇集的試播篇由Berlanti、Kreisberg和Johns寫作,David Nutter執導。該劇集於2014年10月7日在北美首映,成為CW電視台收視率最高的電視節目。
綠箭俠是一部由劇作家/製片人 Greg Berlanti、Marc Guggenheim和Andrew Kreisberg創作的電視連續劇。它基於DC漫畫角色綠箭俠,一個由Mort Weisinger和George Papp創作的裝扮奇特的犯罪打擊戰士。它於2012年10月10日在北美首映,與2012年末開始全球播出。主要拍攝於Vancouver、British Columbia、Canada,該系列講述了億萬花花公子Oliver Queen,由Stephen Amell扮演,被困在敵人的島嶼上五年之後,回到家鄉打擊犯罪和腐敗,成為一名武器是弓箭的神秘義務警員。不像漫畫書中,Queen最初沒有使用化名」綠箭俠「。
由於這兩個節目並列為我最喜愛的電視節目頭銜,我一直想知道哪個節目更受其他人歡迎——誰會最終贏得這場收視率之戰。 所以讓我們寫一個程序來預測哪個電視節目會有更多觀眾。 我們需要一個數據集,給出每一集的觀眾。幸運地,我從維基網路上得到了這個數據,並整理成一個.csv文件。它如下所示。
閃電俠
閃電俠美國觀眾數
綠箭俠
綠箭俠美國觀眾數
1 4.83 1 2.84
2 4.27 2 2.32
3 3.59 3 2.55
4 3.53 4 2.49
5 3.46 5 2.73
6 3.73 6 2.6
7 3.47 7 2.64
8 4.34 8 3.92
9 4.66 9 3.06
觀眾數以百萬為單位。
解決問題的步驟:
首先我們需要把數據轉換為X_parameters和Y_parameters,不過這里我們有兩個X_parameters和Y_parameters。因此,把他們命名為flash_x_parameter、flash_y_parameter、arrow_x_parameter、arrow_y_parameter吧。然後我們需要把數據擬合為兩個不同的線性回歸模型——先是閃電俠,然後是綠箭俠。 接著我們需要預測兩個電視節目下一集的觀眾數量。 然後我們可以比較結果,推測哪個節目會有更多觀眾。
步驟1
導入我們的程序包:
Python
1
2
3
4
5
6
7
# Required Packages
import csv
import sys
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn import datasets, linear_model
步驟2
寫一個函數,把我們的數據集作為輸入,返回flash_x_parameter、flash_y_parameter、arrow_x_parameter、arrow_y_parameter values。
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
# Function to get data
def get_data(file_name):
data = pd.read_csv(file_name)
flash_x_parameter = []
flash_y_parameter = []
arrow_x_parameter = []
arrow_y_parameter = []
for x1,y1,x2,y2 in zip(data['flash_episode_number'],data['flash_us_viewers'],data['arrow_episode_number'],data['arrow_us_viewers']):
flash_x_parameter.append([float(x1)])
flash_y_parameter.append(float(y1))
arrow_x_parameter.append([float(x2)])
arrow_y_parameter.append(float(y2))
return flash_x_parameter,flash_y_parameter,arrow_x_parameter,arrow_y_parameter
現在我們有了我們的參數,來寫一個函數,用上面這些參數作為輸入,給出一個輸出,預測哪個節目會有更多觀眾。
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Function to know which Tv show will have more viewers
def more_viewers(x1,y1,x2,y2):
regr1 = linear_model.LinearRegression()
regr1.fit(x1, y1)
predicted_value1 = regr1.predict(9)
print predicted_value1
regr2 = linear_model.LinearRegression()
regr2.fit(x2, y2)
predicted_value2 = regr2.predict(9)
#print predicted_value1
#print predicted_value2
if predicted_value1 > predicted_value2:
print "The Flash Tv Show will have more viewers for next week"
else:
print "Arrow Tv Show will have more viewers for next week"
把所有東西寫在一個文件中。打開你的編輯器,把它命名為prediction.py,復制下面的代碼到prediction.py中。
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Required Packages
import csv
import sys
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn import datasets, linear_model
# Function to get data
def get_data(file_name):
data = pd.read_csv(file_name)
flash_x_parameter = []
flash_y_parameter = []
arrow_x_parameter = []
arrow_y_parameter = []
for x1,y1,x2,y2 in zip(data['flash_episode_number'],data['flash_us_viewers'],data['arrow_episode_number'],data['arrow_us_viewers']):
flash_x_parameter.append([float(x1)])
flash_y_parameter.append(float(y1))
arrow_x_parameter.append([float(x2)])
arrow_y_parameter.append(float(y2))
return flash_x_parameter,flash_y_parameter,arrow_x_parameter,arrow_y_parameter
# Function to know which Tv show will have more viewers
def more_viewers(x1,y1,x2,y2):
regr1 = linear_model.LinearRegression()
regr1.fit(x1, y1)
predicted_value1 = regr1.predict(9)
print predicted_value1
regr2 = linear_model.LinearRegression()
regr2.fit(x2, y2)
predicted_value2 = regr2.predict(9)
#print predicted_value1
#print predicted_value2
if predicted_value1 > predicted_value2:
print "The Flash Tv Show will have more viewers for next week"
else:
print "Arrow Tv Show will have more viewers for next week"
x1,y1,x2,y2 = get_data('input_data.csv')
#print x1,y1,x2,y2
more_viewers(x1,y1,x2,y2)
可能你能猜出哪個節目會有更多觀眾——但運行一下這個程序看看你猜的對不對。
3) 替換數據集中的缺失值
有時候,我們會遇到需要分析包含有缺失值的數據的情況。有些人會把這些缺失值捨去,接著分析;有些人會用最大值、最小值或平均值替換他們。平均值是三者中最好的,但可以用線性回歸來有效地替換那些缺失值。
這種方法差不多像這樣進行。
首先我們找到我們要替換那一列里的缺失值,並找出缺失值依賴於其他列的哪些數據。把缺失值那一列作為Y_parameters,把缺失值更依賴的那些列作為X_parameters,並把這些數據擬合為線性回歸模型。現在就可以用缺失值更依賴的那些列預測缺失的那一列。
一旦這個過程完成了,我們就得到了沒有任何缺失值的數據,供我們自由地分析數據。
為了練習,我會把這個問題留給你,所以請從網上獲取一些缺失值數據,解決這個問題。一旦你完成了請留下你的評論。我很想看看你的結果。
個人小筆記:
我想分享我個人的數據挖掘經歷。記得在我的數據挖掘引論課程上,教師開始很慢,解釋了一些數據挖掘可以應用的領域以及一些基本概念。然後突然地,難度迅速上升。這令我的一些同學感到非常沮喪,被這個課程嚇到,終於扼殺了他們對數據挖掘的興趣。所以我想避免在我的博客文章中這樣做。我想讓事情更輕松隨意。因此我嘗試用有趣的例子,來使讀者更舒服地學習,而不是感到無聊或被嚇到。
謝謝讀到這里——請在評論框里留下你的問題或建議,我很樂意回復你。
Ⅶ 如何用python實現含有虛擬自變數的回歸
參考資料:
DataRobot | Ordinary Least Squares in Python
DataRoboe | Multiple Regression using Statsmodels
AnalyticsVidhya | 7 Types of Regression Techniques you should know!
Ⅷ 每個數據科學人都應該知道的7種回歸技術
介紹 線性回歸和邏輯回歸通常是人們在數據科學中學習的第一種演算法。由於它們的受歡迎程度,許多分析師甚至認為它們是唯一的回歸形式。哪兒些稍微有工作經驗的人也會認為它們是所有回歸分析形式的中最重要的。
事實是,有無數種形式的回歸可以使用。每種形式的回歸都有其自身的重要性和最適合應用的特定場景。在本文中,我會以簡單的方式解釋了數據科學中最常用的7種回歸形式。通過這篇文章,我也希望人們能夠對回歸的廣度有一個概念,而不是僅僅對他們遇到的每個問題應都用線性/邏輯回歸,並希望他們能夠使用這么多的回歸技術!
如果您是數據科學的新手,並且正在尋找一個開始學習的地方,那麼「 數據科學 」課程是一個很好的起點!它涵蓋了Python,統計和預測建模的核心主題,它是你進入數據科學的第一步的完美方法。
什麼是回歸分析?
回歸分析是預測建模技術的一種技術,它研究依賴(目標)和自變數(預測變數)之間的關系。該技術用於預測,時間序列建模和查找變數之間的因果關系。例如,通過回歸可以最好地研究魯莽駕駛與駕駛員發生道路交通事故數量之間的關系。
回歸分析是建模和分析數據的重要工具。在這里,我們將曲線/直線線擬合到數據點,使得數據點距曲線或直線的距離之間的差異最小化。我將在接下來的章節中詳細解釋這一點。
為什麼我們使用回歸分析?
如上所述,回歸分析是估計兩個或更多變數之間的關系。讓我們通過一個簡單的例子來理解這一點:
比方說,你想根據當前的經濟狀況估算公司的銷售增長率。您有最近的公司數據表明銷售增長約為經濟增長的2.5倍。利用這種洞察力,我們可以根據當前和過去的信息預測公司的未來銷售情況。
使用回歸分析有許多好處。如下:
它表明因變數和自變數之間的顯著關系。 它表示多個自變數對一個因變數的影響強度。
回歸分析還允許我們比較不同尺度上測量的變數的影響,例如價格變化的影響和促銷活動的數量。這些優勢有助於市場研究人員/數據分析師/數據科學家消除和評估用於構建預測模型的最佳變數集。
我們有多少種回歸技術?
我們有各種各樣的回歸技術可用用於預測。這些技術主要由三個指標(自變數的數量,因變數的類型和回歸線的形狀)驅動。我們將在以下部分詳細討論它們。
對於創造性的,如果您覺得需要使用上述參數的組合,您甚至可以製作新的回歸,以前人們沒有使用過。但在開始之前,讓我們了解最常用的回歸:
1.線性回歸
它是最廣為人知的建模技術之一。線性回歸通常是人們在學習預測建模時最先選擇的幾個方法之一。在該方法中,因變數是連續的,自變數可以是連續的或離散的,並且回歸線的性質是線性的。
線性回歸使用最佳擬合直線(也稱為回歸線)在因變數(Y)和一個或多個自變數(X)之間建立關系。
它由方程Y = a + b * X + e表示,其中a是截距,b是直線的斜率,e是誤差項。該等式可以根據給定的預測變數預測目標變數的值。
簡單線性回歸和多元線性回歸之間的區別在於,多元線性回歸具有(> 1)個獨立變數,而簡單線性回歸只有1個獨立變數。現在的問題是「我們如何獲得最佳擬合線?」。
如何獲得最佳擬合線(a和b的值)?
這項任務可以通過最小二乘法輕松完成。它是用於擬合回歸線的最常用方法。它通過最小化每個數據點到直線的垂直偏差的平方和來計算觀測數據的最佳擬合線。因為偏差首先要平方,所以當相加時,正值和負值之間不會抵消。
我們可以使用度量的R平方來評估模型性能 。
重點: 自變數和因變數之間必須存在線性關系 多元回歸存在多重共線性,自相關,異方差等問題。 線性回歸對異常值非常敏感。它可以極大地影響回歸線並最終影響預測值。 多重共線性可以增加系數估計的方差,並使估計對模型中的微小變化非常敏感。結果是系數估計不穩定 在多個獨立變數的情況下,我們可以選擇正向選擇,逆向淘汰和逐步方法來選擇最重要的自變數。 2. 邏輯回歸
邏輯回歸方法用於查找事件成功的概率和失敗的概率。當因變數本質上是二進制(0/1,真/假,是/否)時,我們應該使用邏輯回歸。這里Y值的范圍從0到1,它可以用下面的等式表示。
odds = p /(1-p)=事件發生概率/非事件發生概率 ln(賠率)= ln(p /(1-p)) logit(p)= ln(p /(1-p))= b0 + b1X1 + b2X2 + b3X3 .... + bkXk
以上,p是存在感興趣特徵的概率。這時候你應該要問一個問題就是「為什麼我們要在等式中使用對數log?」。
由於我們在這里使用的是二項分布(因變數),我們需要選擇最適合此分布的鏈接函數。而且,它是logit函數。在上面的等式中,選擇此參數是為了以最大化觀察樣本值的可能性,而不是最小化平方誤差的總和(如在普通回歸中一樣)。
重點: 它被廣泛用於分類問題 邏輯回歸不需要依賴因變數和自變數之間的線性關系。它可以處理各種類型的關系,因為它將非線性對數變換應用於預測的優勢比 為避免過度擬合和欠擬合,我們應該包括所有重要的變數。確保這種做法的一個好方法是使用逐步方法來估計邏輯回歸 它需要較大樣本量,因為在樣本量較小時,最大似然估計的效率低於普通的最小二乘法 自變數不應相互關聯,即不具有多重共線性。但是,我們可以選擇在分析和模型中包含分類變數的交互作用。 如果因變數的值是序數,那麼它被稱為序數邏輯回歸 如果因變數是多類的,那麼它被稱為多元邏輯回歸。 3.多項式回歸
如果自變數的冪大於1,則回歸方程是多項式回歸方程。下面的等式表示多項式方程:
Y = A + B * X ^ 2
在這種回歸技術中,最佳擬合線不是直線。它是一條與數據點吻合的曲線。
重點: 雖然可能存在擬合更高次多項式以獲得更低誤差的誘惑,但這可能會導致過度擬合。始終繪制關系圖以查看是否匹配,並專注於確保曲線符合問題的本質。以下是繪圖如何幫助的示例: 特別注意的是末端的曲線,看看這些形狀和趨勢是否有意義。較高的多項式最終會產生奇怪的結果。 4.逐步回歸
當我們處理多個自變數時,會使用這種形式的回歸。在這種技術中,自變數的選擇是在自動過程的幫助下完成的,這個過程是不需要人為的去進行干預的。
通過觀察R方、t檢驗和AIC指標等統計值來識別重要變數,可以實現這一壯舉。逐步回歸基本上適合回歸模型,通過基於指定的標准一次一個地添加/刪除協變數。下面列出了一些最常用的逐步回歸方法:
標准逐步回歸做兩件事。它根據每個步驟的需要添加和刪除預測變數。 正向選擇從模型中最重要的預測變數開始,並為每個步驟添加變數。 向後消除從模型中的所有預測變數開始,並刪除每個步驟的最不重要的變數。
該建模技術的目的是以最少的預測變數來最大化預測能力。它是處理數據集更高維度的方法之一。
5.嶺回歸
嶺回歸是一種在數據存在多重共線性(自變數高度相關)時使用的技術。在多重共線性中,即使最小二乘估計(OLS)是無偏的,但它們的方差也很大,這使得觀測值偏離真實值。通過在回歸估計中增加一定程度的偏差,嶺回歸可以減少標准誤差。
上面,我們看到了線性回歸的方程。還記得嘛?它可以表示為:
y = a + b * x
這個方程也有一個誤差項。完整的等式變為:
y = a + b * x + e(誤差項),[誤差項是校正觀測值和預測值之間預測誤差所需的值] 表示多個自變數,=> y = a + y = a + b1x1 + b2x2 + .... + e。
在線性方程中,預測誤差可以分解為兩個子分量。首先是由於偏差,第二是由於方差。由於這兩個或兩個組件中的任何一個,都可能發生預測錯誤。在這里,我們將討論由於方差引起的錯誤。
嶺回歸通過收縮參數 λ(lambda)解決了多重共線性問題 。看下面的方程。
在這個方程中,我們有兩個組成部分。第一個是最小二乘項,另一個是β2 (β平方)總和的λ,其中β是系數。這被添加到最小二乘項,以便縮小參數以具有非常低的方差。
重點: 該回歸的假設與最小二乘回歸相同,但不假設正態性 它會縮小系數的值,但不會達到零,這表明沒有特徵選擇功能 這是一種正則化方法,並使用l2正則化。 6.Lasso回歸
類似於嶺回歸,Lasso(最小絕對收縮和選擇運算元)也會對回歸系數的絕對大小進行限制。此外,它還能夠降低線性回歸模型的可變性並提高其准確性。請看下面的方程:
Lasso回歸與嶺回歸的不同之處在於,它在懲罰函數中使用絕對值而不是平方。這導致懲罰(或等效地約束估計值的絕對值的總和)值,從而導致一些參數估計值恰好為零。應用的懲罰越大,估計值就會縮小到絕對零值。這導致從給定的n個變數中進行變數選擇。
重點: 該回歸的假設與最小二乘回歸相同,但不假設正態性 它將系數縮小到零(恰好為零),這肯定有助於特徵選擇 這是一種正則化方法並使用l1正則化 如果預測變數高度相關,則Lasso僅選取其中一個並將其他預測縮減為零 7.彈性網路回歸
彈性網路回歸是Lasso回歸和嶺回歸技術的混合體。它使用L1和L2先驗作為正則化器進行訓練。當存在多個相關的特徵時,彈性網路是很有用的。Lasso可能隨機選擇其中一種,而彈性網很可能同時選擇兩個。
在Lasso回歸和嶺回歸之間進行權衡的一個實際優勢是,它允許彈性網路在旋轉下繼承嶺回歸的一些穩定性。
重點: 在變數高度相關的情況下,它鼓勵群體效應 所選變數的數量沒有限制 它會受到雙重收縮的影響 如何選擇正確的回歸模型?
當你只知道一兩種技術時,生活通常是很簡單的。我所知道的其中一個培訓機構告訴他們的學生 - 如果結果是連續的 - 那就用線性回歸。如果是二進制的 - 那就用邏輯回歸!但是,我們可以使用的選項數量越多,選擇正確的選項就越困難。回歸模型也會發生類似的情況。
在多種類型的回歸模型中,基於自變數和因變數的類型,數據中的維度以及數據的其他基本特徵來選擇最適合的回歸方法是很重要的。以下是應該選擇正確的回歸模型的關鍵因素:
數據挖掘是構建預測模型的必然部分。在選擇正確的模型之前,應該首先確定變數之間的相關系數和影響 為了比較不同模型的擬合優度,我們可以分析不同的指標,如參數的統計顯著性,R方,調整後的R方,AIC指標,BIC指標和誤差項。另一個是Mallow的Cp標准。這基本上通過將模型與所有可能的子模型(仔細選擇它們)進行比較,來檢查模型中可能存在的偏差。 交叉驗證是評估用於預測的模型的最佳方式。在這里,可以將數據集分為兩組(訓練和驗證)。觀測值和預測值之間的簡單均方差可以衡量預測的准確性。 如果你的數據集有多個混淆變數,則不應選擇自動模型選擇方法,因為你不會希望同時將它們放在模型中。 這也取決於你的目標。與具有高度統計意義的模型相比,功能較弱的模型更容易實現。 回歸正則化方法(Lasso回歸,嶺回歸和彈性網路回歸)在數據集中各變數之間具有高維度和多重共線性的情況下運行良好。 結束語
到現在為止,我希望你已經對回歸有所了解。考慮數據條件來應用這些回歸技術。找出使用哪種技術的最佳技巧之一就是檢查變數族,即離散變數還是連續變數。
在本文中,我討論了7種類型的回歸以及與每種技術相關的一些關鍵事實。作為這個行業的新人,我建議你學習這些技術,然後在你的模型中實現它們。
-以上就是作者推薦的七種數據科學人必知必會的七種回歸模型,如果大家對這七種模型感興趣,那就自己動手去實驗一下吧,只知道理論是不夠的,要多動手實驗,才能真正的掌握這些模型。
7 Types of Regression Techniques you should know!
Ⅸ 如何用Python進行線性回歸以及誤差分析
如何用Python進行線性回歸以及誤差分析
如果你想要重命名,只需要按下:
CTRL-b
狀態條將會改變,這時你將可以重命名當前的窗口
一旦在一個會話中創建多個窗口,我們需要在這些窗口間移動的辦法。窗口像數組一樣組織在一起,從0開始用數字標記每個窗口,想要快速跳轉到其餘窗口:
CTRL-b 《窗口號》
如果我們給窗口起了名字,我們可以使用下面的命令找到它們:
CTRL-b f
也可以列出所有窗口:
CTRL-b w
Ⅹ python如何做數據分析
用Python做數據分析,大致流程如下:
1、數據獲取
可以通過SQL查詢語句來獲取資料庫中想要數據。Python已經具有連接sql server、mysql、orcale等主流資料庫的介麵包,比如pymssql、pymysql、cx_Oracle等。
2、數據存儲
企業當中的數據存儲,通過通過資料庫如Mysql來存儲與管理,對於非結構化數據的存儲可以使用MongoDB等。對於使用Python進行網路抓取的數據,我們也可以使用pymysql包快速地將其存儲到Mysql中去。
3、數據預處理/數據清洗
大多數情況下,原始數據是存在格式不一致,存在異常值、缺失值等問題的,而不同項目數據預處理步驟的方法也不一樣。Python做數據清洗,可以使用Numpy和Pandas這兩個工具庫。
4、數據建模與分析
常見的數據挖掘模型有:分類、聚類、回歸等,這些常見的演算法模型,Python也有Scikit-learn和Tensorflow工具庫來支持。
5、數據可視化分析
在數據可視化方面,Python有Matplotlib、Seaborn、Pyecharts等工具庫可用。