-
當(dāng)前位置:首頁 > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
import pandas as pd
<pre name="code" class="python"># read csv file directly from a URL and save the results
data = pd.read_csv('/home/lulei/Advertising.csv')
# display the first 5 rows
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
Series類似于一維數(shù)組,它有一組數(shù)據(jù)以及一組與之相關(guān)的數(shù)據(jù)標(biāo)簽(即索引)組成。
DataFrame是一個(gè)表格型的數(shù)據(jù)結(jié)構(gòu),它含有一組有序的列,每列可以是不同的值類型。DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典。
# display the last 5 rows
data.tail()
- 只顯示結(jié)果的末尾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
# check the shape of the DataFrame(rows, colums)
data.shape
- 查看DataFrame的形狀,注意第一列的叫索引,和數(shù)據(jù)庫某個(gè)表中的第一列類似。
TV:對于一個(gè)給定市場中單一產(chǎn)品,用于電視上的廣告費(fèi)用(以千為單位)
Radio:在廣播媒體上投資的廣告費(fèi)用
Newspaper:用于報(bào)紙媒體的廣告費(fèi)用
Sales:對應(yīng)產(chǎn)品的銷量
import seaborn as sns
import matplotlib.pyplot as plt
# visualize the relationship between the features and the response using scatterplots
sns.pairplot(data, x_vars=['TV','Radio','Newspaper'], y_vars='Sales', size=7, aspect=0.8)
plt.show()#注意必須加上這一句,否則無法顯示。
這里選擇TV、Radio、Newspaper 作為特征,Sales作為觀測值
返回的結(jié)果:
- seaborn的pairplot函數(shù)繪制X的每一維度和對應(yīng)Y的散點(diǎn)圖。通過設(shè)置size和aspect參數(shù)來調(diào)節(jié)顯示的大小和比例??梢詮膱D中看出,TV特征和銷量是有比較強(qiáng)的線性關(guān)系的,而Radio和Sales線性關(guān)系弱一些,Newspaper和Sales線性關(guān)系更弱。通過加入一個(gè)參數(shù)kind='reg',seaborn可以添加一條最佳擬合直線和95%的置信帶。
sns.pairplot(data, x_vars=['TV','Radio','Newspaper'], y_vars='Sales', size=7, aspect=0.8, kind='reg')
plt.show()
- 結(jié)果顯示如下:
y是響應(yīng)
β0是截距
β1是x1的系數(shù),以此類推
- (1)、使用pandas來構(gòu)建X(特征向量)和y(標(biāo)簽列)
#create a python list of feature names
feature_cols = ['TV', 'Radio', 'Newspaper']
# use the list to select a subset of the original DataFrame
X = data[feature_cols]
# equivalent command to do this in one line
X = data[['TV', 'Radio', 'Newspaper']]
# print the first 5 rows
print X.head()
# check the type and shape of X
print type(X)
print X.shape
- 輸出結(jié)果如下:
- TV Radio Newspaper
- 0 230.1 37.8 69.2
- 1 44.5 39.3 45.1
- 2 17.2 45.9 69.3
- 3 151.5 41.3 58.5
- 4 180.8 10.8 58.4
- <class 'pandas.core.frame.DataFrame'>
- (200, 3)
# select a Series from the DataFrame
y = data['Sales']
# equivalent command that works if there are no spaces in the column name
y = data.Sales
# print the first 5 values
print y.head()
- 輸出的結(jié)果如下:
- 0 22.1
- 1 10.4
- 2 9.3
- 3 18.5
- 4 12.9
- Name: Sales
<pre name="code" class="python"><span style="font-size:14px;">##構(gòu)造訓(xùn)練集和測試集
from sklearn.cross_validation import train_test_split #這里是引用了交叉驗(yàn)證
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
print X_train.shape
print y_train.shape
print X_test.shape
print y_test.shape
- 輸出結(jié)果如下:
- (150, 3)
- (150,)
- (50, 3)
- (50,)
- ImportError Traceback (most recent call last)<ipython-input-182-3eee51fcba5a> in <module>() 1 ###構(gòu)造訓(xùn)練集和測試集----> 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
- (3)sklearn的線性回歸
from sklearn.linear_model import LinearRegression
linreg = LinearRegression()
model=linreg.fit(X_train, y_train)
print model
print linreg.intercept_
print linreg.coef_
- 輸出的結(jié)果如下:
- LinearRegression(copy_X=True, fit_intercept=True, normalize=False)
- 2.66816623043
- [ 0.04641001 0.19272538 -0.00349015]
# pair the feature names with the coefficients
zip(feature_cols, linreg.coef_)
- 輸出如下:
- [('TV', 0.046410010869663267),
- ('Radio', 0.19272538367491721),
- ('Newspaper', -0.0034901506098328305)]
- y=2.668+0.0464∗TV+0.192∗Radio-0.00349∗Newspaper
- 如何解釋各個(gè)特征對應(yīng)的系數(shù)的意義?
y_pred = linreg.predict(X_test)
print y_pred
print type(y_pred)
- 輸出結(jié)果如下:
- [ 14.58678373 7.92397999 16.9497993 19.35791038 7.36360284
- 7.35359269 16.08342325 9.16533046 20.35507374 12.63160058
- 22.83356472 9.66291461 4.18055603 13.70368584 11.4533557
- 4.16940565 10.31271413 23.06786868 17.80464565 14.53070132
- 15.19656684 14.22969609 7.54691167 13.47210324 15.00625898
- 19.28532444 20.7319878 19.70408833 18.21640853 8.50112687
- 9.8493781 9.51425763 9.73270043 18.13782015 15.41731544
- 5.07416787 12.20575251 14.05507493 10.6699926 7.16006245
- 11.80728836 24.79748121 10.40809168 24.05228404 18.44737314
- 20.80572631 9.45424805 17.00481708 5.78634105 5.10594849]
- <type 'numpy.ndarray'>
<pre name="code" class="python">#計(jì)算Sales預(yù)測的RMSE
print type(y_pred),type(y_test)
print len(y_pred),len(y_test)
print y_pred.shape,y_test.shape
from sklearn import metrics
import numpy as np
sum_mean=0
for i in range(len(y_pred)):
sum_mean+=(y_pred[i]-y_test.values[i])**2
sum_erro=np.sqrt(sum_mean/50)
# calculate RMSE by hand
print "RMSE by hand:",sum_erro
- 最后的結(jié)果如下:
- <type 'numpy.ndarray'> <class 'pandas.core.series.Series'>
- 50 50
- (50,) (50,)
- RMSE by hand: 1.42998147691
- (2)做ROC曲線
import matplotlib.pyplot as plt
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="upper right") #顯示圖中的標(biāo)簽
plt.xlabel("the number of sales")
plt.ylabel('value of sales')
plt.show()
- 顯示結(jié)果如下:(紅色的線是真實(shí)的值曲線,藍(lán)色的是預(yù)測值曲線)
#create a python list of feature names
feature_cols = ['TV', 'Radio', 'Newspaper']
# use the list to select a subset of the original DataFrame
X = data[feature_cols]
# equivalent command to do this in one line
#X = data[['TV', 'Radio', 'Newspaper']]#只需修改這里即可<pre name="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
- 2.81843904823
- [ 0.04588771 0.18721008]
- RMSE by hand: 1.28208957507
- 然后再次使用ROC曲線來觀測曲線的整體情況。我們在將Newspaper這個(gè)特征移除之后,得到RMSE變小了,說明Newspaper特征可能不適合作為預(yù)測銷量的特征,于是,我們得到了新的模型。我們還可以通過不同的特征組合得到新的模型,看看最終的誤差是如何的。
- 之前我提到了這種錯(cuò)誤:
- ImportError Traceback (most recent call last)<ipython-input-182-3eee51fcba5a> in <module>() 1 ###構(gòu)造訓(xùn)練集和測試集----> 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
- 這里我給出我自己寫的函數(shù):
import random
<span style="font-family:microsoft yahei;">######自己寫一個(gè)隨機(jī)分配數(shù)的函數(shù),分成兩份,并將數(shù)值一次存儲(chǔ)在對應(yīng)的list中##########
def train_test_split(ylabel, random_state=1):
import random
index=random.sample(range(len(ylabel)),50*random_state)
list_train=[]
list_test=[]
i=0
for s in range(len(ylabel)):
if i in index:
list_test.append(i)
else:
list_train.append(i)
i+=1
return list_train,list_test
###############對特征進(jìn)行分割#############################
feature_cols = ['TV', 'Radio','Newspaper']
X1 = data[feature_cols]
線性回歸模型計(jì)算(線性回歸模型計(jì)算器)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于線性回歸模型計(jì)算的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、python多元線性回歸怎么計(jì)算
1、什么是多元線性回歸模型?
當(dāng)y值的影響因素不唯一時(shí),采用多元線性回歸模型。
y =y=β0+β1x1+β2x2+...+βnxn
例如商品的銷售額可能不電視廣告投入,收音機(jī)廣告投入,報(bào)紙廣告投入有關(guān)系,可以有 sales =β0+β1*TV+β2* radio+β3*newspaper.
2、使用pandas來讀取數(shù)據(jù)
pandas 是一個(gè)用于數(shù)據(jù)探索、數(shù)據(jù)分析和數(shù)據(jù)處理的python庫
[python] view plain copy
[html] view plain copy
上面代碼的運(yùn)行結(jié)果:
上面顯示的結(jié)果類似一個(gè)電子表格,這個(gè)結(jié)構(gòu)稱為Pandas的數(shù)據(jù)幀(data frame),類型全稱:pandas.core.frame.DataFrame.
pandas的兩個(gè)主要數(shù)據(jù)結(jié)構(gòu):Series和DataFrame:
[python] view plain copy
[html] view plain copy
(200,4)
3、分析數(shù)據(jù)
特征:
響應(yīng):
在這個(gè)案例中,我們通過不同的廣告投入,預(yù)測產(chǎn)品銷量。因?yàn)轫憫?yīng)變量是一個(gè)連續(xù)的值,所以這個(gè)問題是一個(gè)回歸問題。數(shù)據(jù)集一共有200個(gè)觀測值,每一組觀測對應(yīng)一個(gè)市場的情況。
注意:這里推薦使用的是seaborn包。網(wǎng)上說這個(gè)包的數(shù)據(jù)可視化效果比較好看。其實(shí)seaborn也應(yīng)該屬于matplotlib的內(nèi)部包。只是需要再次的單獨(dú)安裝。
[python] view plain copy
[html] view plain copy
[html] view plain copy
[python] view plain copy
4、線性回歸模型
優(yōu)點(diǎn):快速;沒有調(diào)節(jié)參數(shù);可輕易解釋;可理解。
缺點(diǎn):相比其他復(fù)雜一些的模型,其預(yù)測準(zhǔn)確率不是太高,因?yàn)樗僭O(shè)特征和響應(yīng)之間存在確定的線性關(guān)系,這種假設(shè)對于非線性的關(guān)系,線性回歸模型顯然不能很好的對這種數(shù)據(jù)建模。
線性模型表達(dá)式: y=β0+β1x1+β2x2+...+βnxn 其中
在這個(gè)案例中: y=β0+β1∗TV+β2∗Radio+...+βn∗Newspaper
scikit-learn要求X是一個(gè)特征矩陣,y是一個(gè)NumPy向量。
pandas構(gòu)建在NumPy之上。
因此,X可以是pandas的DataFrame,y可以是pandas的Series,scikit-learn可以理解這種結(jié)構(gòu)。
[python] view plain copy
[python] view plain copy
(2)、構(gòu)建訓(xùn)練集與測試集
[html] view plain copy
[html] view plain copy
注:上面的結(jié)果是由train_test_spilit()得到的,但是我不知道為什么我的版本的sklearn包中居然報(bào)錯(cuò):
處理方法:1、我后來重新安裝sklearn包。再一次調(diào)用時(shí)就沒有錯(cuò)誤了。
2、自己寫函數(shù)來認(rèn)為的隨機(jī)構(gòu)造訓(xùn)練集和測試集。(這個(gè)代碼我會(huì)在最后附上。)
[html] view plain copy
[html] view plain copy
對于給定了Radio和Newspaper的廣告投入,如果在TV廣告上每多投入1個(gè)單位,對應(yīng)銷量將增加0.0466個(gè)單位。就是加入其它兩個(gè)媒體投入固定,在TV廣告上每增加1000美元(因?yàn)閱挝皇?000美元),銷量將增加46.6(因?yàn)閱挝皇?000)。但是大家注意這里的newspaper的系數(shù)居然是負(fù)數(shù),所以我們可以考慮不使用newspaper這個(gè)特征。這是后話,后面會(huì)提到的。
(4)、預(yù)測
[python] view plain copy
[python] view plain copy
5、回歸問題的評價(jià)測度
(1) 評價(jià)測度
對于分類問題,評價(jià)測度是準(zhǔn)確率,但這種方法不適用于回歸問題。我們使用針對連續(xù)數(shù)值的評價(jià)測度(evaluation metrics)。
這里介紹3種常用的針對線性回歸的測度。
1)平均絕對誤差(Mean Absolute Error, MAE)
(2)均方誤差(Mean Squared Error, MSE)
(3)均方根誤差(Root Mean Squared Error, RMSE)
這里我使用RMES。
[python] view plain copy
[python] view plain copy
直到這里整個(gè)的一次多元線性回歸的預(yù)測就結(jié)束了。
6、改進(jìn)特征的選擇
在之前展示的數(shù)據(jù)中,我們看到Newspaper和銷量之間的線性關(guān)系竟是負(fù)關(guān)系(不用驚訝,這是隨機(jī)特征抽樣的結(jié)果。換一批抽樣的數(shù)據(jù)就可能為正了),現(xiàn)在我們移除這個(gè)特征,看看線性回歸預(yù)測的結(jié)果的RMSE如何?
依然使用我上面的代碼,但只需修改下面代碼中的一句即可:
[python] view plain copy
最后的到的系數(shù)與測度如下:
LinearRegression(copy_X=True, fit_intercept=True, normalize=False)
備注:
注:上面的結(jié)果是由train_test_spilit()得到的,但是我不知道為什么我的版本的sklearn包中居然報(bào)錯(cuò):
處理方法:1、我后來重新安裝sklearn包。再一次調(diào)用時(shí)就沒有錯(cuò)誤了。
2、自己寫函數(shù)來認(rèn)為的隨機(jī)構(gòu)造訓(xùn)練集和測試集。(這個(gè)代碼我會(huì)在最后附上。)
[python] view plain copy
[python] view plain copy
二、線性回歸方程公式b怎么求
第一:用所給樣本求出兩個(gè)相關(guān)變量的(算術(shù))平均值:
x_=(x1+x2+x3+...+xn)/n
y_=(y1+y2+y3+...+yn)/n
第二:分別計(jì)算分子和分母:(兩個(gè)公式任選其一)
分子=(x1y1+x2y2+x3y3+...+xnyn)-nx_Y_
分母=(x1^2+x2^2+x3^2+...+xn^2)-n*x_^2
第三:計(jì)算 b : b=分子 / 分母
用最小二乘法估計(jì)參數(shù)b,設(shè)服從正態(tài)分布,分別求對a、b的偏導(dǎo)數(shù)并令它們等于零,得方程組解為
其中 ,且為觀測值的樣本方差.線性方程稱為關(guān)于的線性回歸方程,稱為回歸系數(shù),對應(yīng)的直線稱為回歸直線.順便指出,將來還需用到,其中為觀測值的樣本方差.
先求x,y的平均值X,Y
再用公式代入求解:b=(x1y1+x2y2+...xnyn-nXY)/(x1+x2+...xn-nX)
后把x,y的平均數(shù)X,Y代入a=Y-bX
求出a并代入總的公式y(tǒng)=bx+a得到線性回歸方程
(X為xi的平均數(shù),Y為yi的平均數(shù))
擴(kuò)展資料
分析按照自變量和因變量之間的關(guān)系類型,可分為線性回歸分析和非線性回歸分析。如果在回歸分析中,只包括一個(gè)自變量和一個(gè)因變量,且二者的關(guān)系可用一條直線近似表示,這種回歸分析稱為一元線性回歸分析。
如果回歸分析中包括兩個(gè)或兩個(gè)以上的自變量,且因變量和自變量之間是線性關(guān)系,則稱為多元線性回歸分析。
參考資料:線性回歸方程的百度百科
三、線性回歸問題怎么求回歸系數(shù)
y=bx+a
例如:
y=3x+1
因?yàn)椴恢纗前面的系數(shù),和常數(shù)項(xiàng)所以設(shè)成a,b,a和b通常是需要求的。
先求x,y的平均值X,Y
再用公式代入求解:b=(x1y1+x2y2+...xnyn-nXY)/(x1+x2+...xn-nX)
后把x,y的平均數(shù)X,Y代入a=Y-bX
求出a并代入總的公式y(tǒng)=bx+a得到線性回歸方程。
擴(kuò)展資料:
在線性回歸中,數(shù)據(jù)使用線性預(yù)測函數(shù)來建模,并且未知的模型參數(shù)也是通過數(shù)據(jù)來估計(jì)。這些模型被叫做線性模型。最常用的線性回歸建模是給定X值的y的條件均值是X的仿射函數(shù)。
不太一般的情況,線性回歸模型可以是一個(gè)中位數(shù)或一些其他的給定X的條件下y的條件分布的分位數(shù)作為X的線性函數(shù)表示。像所有形式的回歸分析一樣,線性回歸也把焦點(diǎn)放在給定X值的y的條件概率分布,而不是X和y的聯(lián)合概率分布。
四、最小二乘法求線性回歸方程中的系數(shù)a,b怎么求
用最小二乘法求回歸直線方程中的a,b有下面的公式:
最小二乘法:總離差不能用n個(gè)離差之和來表示,通常是用離差的平方和,即作為總離差,并使之達(dá)到最小,這樣回歸直線就是所有直線中Q取最小值的那一條,這種使“離差平方和最小”的方法,叫做最小二乘法:
由于絕對值使得計(jì)算不變,在實(shí)際應(yīng)用中人們更喜歡用:Q=(y1-bx1-a)²+(y2-bx-a²)+。。。+(yn-bxn-a)²
這樣,問題就歸結(jié)于:當(dāng)a,b取什么值時(shí)Q最小,即到點(diǎn)直線y=bx+a的“整體距離”最小。
擴(kuò)展資料:
回歸分析的最初目的是估計(jì)模型的參數(shù)以便達(dá)到對數(shù)據(jù)的最佳擬合。在決定一個(gè)最佳擬合的不同標(biāo)準(zhǔn)之中,最小二乘法是非常優(yōu)越的。這種估計(jì)可以表示為:
1)樣本是在母體之中隨機(jī)抽取出來的。
2)因變量Y在實(shí)直線上是連續(xù)的,
3)殘差項(xiàng)是獨(dú)立同分布的,也就是說,殘差是獨(dú)立隨機(jī)的,且服從高斯分布。
這些假設(shè)意味著殘差項(xiàng)不依賴自變量的值,所以 和自變量X(預(yù)測變量)之間是相互獨(dú)立的。在這些假設(shè)下,建立一個(gè)顯示線性回歸作為條件預(yù)期模型的簡單線性回歸方程,可以表示為:
給一個(gè)隨機(jī)樣本 ,一個(gè)線性回歸模型假設(shè)回歸子 和回歸量 之間的關(guān)系是除了X的影響以外,還有其他的變數(shù)存在。我們加入一個(gè)誤差項(xiàng) (也是一個(gè)隨機(jī)變量)來捕獲除了 之外任何對 的影響。
參考資料:百度百科——線性回歸方程
以上就是關(guān)于線性回歸模型計(jì)算相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識和內(nèi)容。
推薦閱讀:
數(shù)字媒體非線性編輯技術(shù)知識點(diǎn)(數(shù)字媒體非線性編輯技術(shù)知識點(diǎn)匯總)
產(chǎn)業(yè)園線性景觀設(shè)計(jì)圖(產(chǎn)業(yè)園線性景觀設(shè)計(jì)圖紙)
產(chǎn)業(yè)園線性景觀設(shè)計(jì)(產(chǎn)業(yè)園線性景觀設(shè)計(jì)圖)
杭州過年特色風(fēng)俗(杭州過年特色風(fēng)俗有哪些)