1. 如何利用Python預測股票價格
預測股票價格沒有意義。
單支股票價格,多股組合,大盤這些都可以使用神經網路來學習,02年就做過了,漲跌預測平均能達到54%到57%的准確率,但是只能定性,無法定量,因此,在扣除印花稅之後無利可圖。
純粹使用股票交易數據來預測並保證總體獲利不是程序能辦到的,人也辦不到。
目前世界上最先進的炒股機器也只能利用網路時差那微不可計的零點幾秒在歐洲與美國證券間倒來倒去,那套系統研發費用數千萬,硬體(主要是獨立光纜)費用以億計。
2. python 線性回歸 樣本外效果預測
看起來你可能在做股票方面的回測。
你自己寫個函數比較預測值和樣本外的實際值的偏差不行嗎?應該比較方便吧
3. 有沒有會用Python編寫一個簡單的建模股票價格的小程序能夠對股票數據進行簡單預測即可!求助!
雖然懂python 但是不懂股票,
採用random()可以么,哈哈
4. 用python寫的計算線性回歸方程的代碼,提示list index out of range,怎麼破
……真討厭用截圖的。復制都不行
range(1,lu)
從零開始的
而且也沒必要lu = l+1
5. 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
<prename="code"class="python">#
data=pd.read_csv('/home/lulei/Advertising.csv')
#displaythefirst5rows
data.head()
- 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類似於一維數組,它有一組數據以及一組與之相關的數據標簽(即索引)組成。
DataFrame是一個表格型的數據結構,它含有一組有序的列,每列可以是不同的值類型。DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典。
#displaythelast5rows
data.tail()
- 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
#checktheshapeoftheDataFrame(rows,colums)
data.shape
TV:對於一個給定市場中單一產品,用於電視上的廣告費用(以千為單位)
Radio:在廣播媒體上投資的廣告費用
Newspaper:用於報紙媒體的廣告費用
Sales:對應產品的銷量
importseabornassns
importmatplotlib.pyplotasplt
#ots
sns.pairplot(data,x_vars=['TV','Radio','Newspaper'],y_vars='Sales',size=7,aspect=0.8)
plt.show()#注意必須加上這一句,否則無法顯示。
這里選擇TV、Radio、Newspaper作為特徵,Sales作為觀測值
返回的結果:
- seaborn的pairplot函數繪制X的每一維度和對應Y的散點圖。通過設置size和aspect參數來調節顯示的大小和比例。可以從圖中看出,TV特徵和銷量是有比較強的線性關系的,而Radio和Sales線性關系弱一些,Newspaper和Sales線性關系更弱。通過加入一個參數kind='reg',seaborn可以添加一條最佳擬合直線和95%的置信帶。
sns.pairplot(data,x_vars=['TV','Radio','Newspaper'],y_vars='Sales',size=7,aspect=0.8,kind='reg')
plt.show()
y是響應
β0是截距
β1是x1的系數,以此類推
#
feature_cols=['TV','Radio','Newspaper']
#
X=data[feature_cols]
#
X=data[['TV','Radio','Newspaper']]
#printthefirst5rows
printX.head()
#checkthetypeandshapeofX
printtype(X)
printX.shape
- 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)
#selectaSeriesfromtheDataFrame
y=data['Sales']
#
y=data.Sales
#printthefirst5values
printy.head()
- 0 22.1
- 1 10.4
- 2 9.3
- 3 18.5
- 4 12.9
- Name: Sales
<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)
printX_train.shape
printy_train.shape
printX_test.shape
printy_test.shape
- (150, 3)
- (150,)
- (50, 3)
- (50,)
- 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
fromsklearn.linear_modelimportLinearRegression
linreg=LinearRegression()
model=linreg.fit(X_train,y_train)
printmodel
printlinreg.intercept_
printlinreg.coef_
- LinearRegression(_X=True, fit_intercept=True, normalize=False)
- 2.66816623043
- [ 0.04641001 0.19272538 -0.00349015]
#
zip(feature_cols,linreg.coef_)
- [('TV', 0.046410010869663267),
- ('Radio', 0.19272538367491721),
- ('Newspaper', -0.0034901506098328305)]
y_pred=linreg.predict(X_test)
printy_pred
printtype(y_pred)
- [ 14.58678373 7.92397999 16.9497993 19.35791038 7.36360284
- 7.35359269 16.08342325 9.3046 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'>
<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
- <type 'numpy.ndarray'> <class 'pandas.core.series.Series'>
- 50 50
- (50,) (50,)
- RMSE by hand: 1.42998147691
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()
#
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其他的代碼不變
- 2.81843904823
- [ 0.04588771 0.18721008]
- RMSE by hand: 1.28208957507
- 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
[html]view plain
上面代碼的運行結果:
上面顯示的結果類似一個電子表格,這個結構稱為Pandas的數據幀(data frame),類型全稱:pandas.core.frame.DataFrame.
pandas的兩個主要數據結構:Series和DataFrame:
[python]view plain
只顯示結果的末尾5行
[html]view plain
查看DataFrame的形狀,注意第一列的叫索引,和資料庫某個表中的第一列類似。
(200,4)
3、分析數據
特徵:
響應:
在這個案例中,我們通過不同的廣告投入,預測產品銷量。因為響應變數是一個連續的值,所以這個問題是一個回歸問題。數據集一共有200個觀測值,每一組觀測對應一個市場的情況。
注意:這里推薦使用的是seaborn包。網上說這個包的數據可視化效果比較好看。其實seaborn也應該屬於matplotlib的內部包。只是需要再次的單獨安裝。
[python]view plain
[html]view plain
[html]view plain
[python]view plain
結果顯示如下:
4、線性回歸模型
優點:快速;沒有調節參數;可輕易解釋;可理解。
缺點:相比其他復雜一些的模型,其預測准確率不是太高,因為它假設特徵和響應之間存在確定的線性關系,這種假設對於非線性的關系,線性回歸模型顯然不能很好的對這種數據建模。
線性模型表達式:y=β0+β1x1+β2x2+...+βnxn其中
在這個案例中: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
輸出結果如下:
[python]view plain
輸出的結果如下:
(2)、構建訓練集與測試集
[html]view plain
#default split is 75% for training and 25% for testing
[html]view plain
輸出結果如下:
註:上面的結果是由train_test_spilit()得到的,但是我不知道為什麼我的版本的sklearn包中居然報錯:
處理方法:1、我後來重新安裝sklearn包。再一次調用時就沒有錯誤了。
2、自己寫函數來認為的隨機構造訓練集和測試集。(這個代碼我會在最後附上。)
(3)sklearn的線性回歸
[html]view plain
輸出的結果如下:
[html]view plain
輸出如下:
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
[python]view plain
輸出結果如下:
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
最後的結果如下:
(2)做ROC曲線
[python]view plain
顯示結果如下:(紅色的線是真實的值曲線,藍色的是預測值曲線)
直到這里整個的一次多元線性回歸的預測就結束了。
6、改進特徵的選擇
在之前展示的數據中,我們看到Newspaper和銷量之間的線性關系竟是負關系(不用驚訝,這是隨機特徵抽樣的結果。換一批抽樣的數據就可能為正了),現在我們移除這個特徵,看看線性回歸預測的結果的RMSE如何?
依然使用我上面的代碼,但只需修改下面代碼中的一句即可:
[python]view plain
# 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、自己寫函數來認為的隨機構造訓練集和測試集。(這個代碼我會在最後附上。)
這里我給出我自己寫的函數:
6. 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)
7. Python 關於兩個股票線性回歸的 求教
你好:上面的程序,請看如下代碼:#-*-coding:cp936-*-end=input("是否結束(y/n):")whileend=="n":print"Numberofcoordinates:2"xx=input("x's:")yy=input("y's:")a=float(list(xx)[0])b=float(list(xx)[1])c=float(list(yy
8. 如何用python做回歸 判斷這個股票和股指間的關系
一個大項目的完成不是樓主以為的一天就能完成,通常會延續一年月乃至數年,看當時的風有多大了。所以去深究一天的盤口意義不是特別大。
大作手如果對大的基本面判斷失誤,籌碼、發動時機控制不好,鎖籌小夥伴背後捅刀子,走水出現大的老鼠倉,資金鏈出問題,碰到其他有錢任性的機構,老婆偷人槍殺兒子導致腦子短路等等雞飛狗跳的事情,項目做折掉,從莊家變股東的可能性也是非常大的,以億計的現金灰飛煙滅不過分分鍾的事情。
===============================================================
A股的死穴——要賺錢必須漲,做多是唯一出路。
做莊的基本原理:比如5元的標的,在底部拿夠籌碼,配合風信,能做多高做多高,比如做到50塊,然後就一路壓低賣下來,賣到15塊,乃至10塊。總有人覺得夠
便宜了會要的。
===============================================================
步驟1:做底倉,一般是先買到流通盤的30%。
具體做法就是在熊市末期,對著往上敲,然後虧本往下砸。賣1個,跟著會掉下來2-3個,接住。做底吸籌這個時間段有時會很長,視實際籌碼的收集情況和大盤走勢而定。
看下圖成交量,主力第一注就是下在中間偏左點的位置,進而不斷往震盪吸籌。那麼大的成交量,你總不會覺得是公眾交易者干出來的吧。
tip:標准底部的特徵就是脈沖式放量縮量,公眾交易者不參與任何震盪,切記。底部持續時間越長,籌碼控制越集中,以後上漲的高度越高,即所謂的橫有多長豎有多高。同時盡量挑選底部形態比較標準的標的,一年時間跨度以上的大圓弧底、復合頭肩、矩形底最好。越漂亮的走勢圖形控盤度越高,籌碼散亂的狀態下往往代表著多方博弈。