導航:首頁 > 編程語言 > 怎麼通過python進行預測

怎麼通過python進行預測

發布時間:2023-12-14 17:07:54

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

Python 代碼示例,使用 scikit-learn 庫中的 SVR 類實現多元回歸預測:
from sklearn.svm import SVR
import numpy as np
# 構造訓練數據
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
y = np.array([1, 2, 3])
# 創建模型並訓練
clf = SVR(kernel='linear')
clf.fit(X, y)
# 進行預測
predictions = clf.predict(X)
print(predictions)
請注意,以上代碼僅供參考,可能需要根據實際情況進行修改。

❷ 如何用Python在10分鍾內建立一個預測模型

預測模型的分解過程
我總是集中於投入有質量的時間在建模的初始階段,比如,假設生成、頭腦風暴、討論或理解可能的結果范圍。所有這些活動都有助於我解決問題,並最終讓我設計出更強大的商業解決方案。為什麼你要在前面花費這段時間,這有充分的理由:
你有足夠的時間投入並且你是無經驗的(這是有影響的)
你不帶有其它數據觀點或想法的偏見(我總是建議,在深入研究數據之前做假設生成)
在後面的階段,你會急於完成該項目而沒有能力投入有質量的時間了。
這個階段需要投入高質量時間,因此我沒有提及時間表,不過我建議你把它作為標準的做法。這有助於你建立建立更好地預測模型,在後面的階段的只需較少的迭代工作。讓我們來看看建立第一個模型的剩餘階段的時間表:
數據描述性分析——50%的時間
數據預處理(缺失值和異常值修復)——40%的時間
數據建模——4%的時間
性能預測——6%的時間
讓我們一步一步完成每個過程(每一步投入預測的時間):
階段1:描述性分析/數據探索
在我剛開始成為數據科學家的時候,數據探索占據了我大量的時間。不過,隨著時間的推移,我已經把大量的數據操作自動化了。由於數據准備占據建立第一個模型工作量的50%,自動化的好處是顯而易見的。
這是我們的第一個基準模型,我們去掉任何特徵設計。因此,描述分析所需的時間僅限於了解缺失值和直接可見的大的特徵。在我的方法體系中,你將需要2分鍾來完成這一步(假設,100000個觀測數據集)。
我的第一個模型執行的操作:
確定ID,輸入特徵和目標特徵
確定分類和數值特徵
識別缺失值所在列
階段2:數據預處理(缺失值處理)
有許多方法可以解決這個問題。對於我們的第一個模型,我們將專注於智能和快速技術來建立第一個有效模型。
為缺失值創建假標志:有用,有時缺失值本身就攜帶了大量的信息。
用均值、中位數或其它簡單方法填補缺失值:均值和中位數填補都表現良好,大多數人喜歡用均值填補但是在有偏分布的情況下我建議使用中位數。其它智能的方法與均值和中位數填補類似,使用其它相關特徵填補或建立模型。比如,在Titanic生存挑戰中,你可以使用乘客名字的稱呼,比如:「Mr.」, 「Miss.」,」Mrs.」,」Master」,來填補年齡的缺失值,這對模型性能有很好的影響。
填補缺失的分類變數:創建一個新的等級來填補分類變數,讓所有的缺失值編碼為一個單一值比如,「New_Cat」,或者,你可以看看頻率組合,使用高頻率的分類變數來填補缺失值。
由於數據處理方法如此簡單,你可以只需要3到4分鍾來處理數據。
階段3:數據建模
根據不同的業務問題,我推薦使用GBM或RandomForest技術的任意一種。這兩個技術可以極其有效地創建基準解決方案。我已經看到數據科學家通常把這兩個方法作為他們的第一個模型同時也作為最後一個模型。這最多用去4到5分鍾。
階段4:性能預測
有各種各樣的方法可以驗證你的模型性能,我建議你將訓練數據集劃分為訓練集和驗證集(理想的比例是70:30)並且在70%的訓練數據集上建模。現在,使用30%的驗證數據集進行交叉驗證並使用評價指標進行性能評估。最後需要1到2分鍾執行和記錄結果。
本文的目的不是贏得比賽,而是建立我們自己的基準。讓我們用python代碼來執行上面的步驟,建立你的第一個有較高影響的模型。
讓我們開始付諸行動
首先我假設你已經做了所有的假設生成並且你擅長使用python的基本數據科學操作。我用一個數據科學挑戰的例子來說明。讓我們看一下結構:
步驟1:導入所需的庫,讀取測試和訓練數據集。
#導入pandas、numpy包,導入LabelEncoder、random、RandomForestClassifier、GradientBoostingClassifier函數
import pandas as pd
import numpy as np
fromsklearn.preprocessing import LabelEncoder
import random
fromsklearn.ensemble import RandomForestClassifier
from sklearn.ensembleimport GradientBoostingClassifier
#讀取訓練、測試數據集
train=pd.read_csv('C:/Users/AnalyticsVidhya/Desktop/challenge/Train.csv')
test=pd.read_csv('C:/Users/AnalyticsVidhya/Desktop/challenge/Test.csv')
#創建訓練、測試數據集標志
train='Train'
test='Test'
fullData =pd.concat(,axis=0) #聯合訓練、測試數據集
步驟2:該框架的第二步並不需要用到python,繼續下一步。
步驟3:查看數據集的列名或概要
fullData.columns # 顯示所有的列名稱
fullData.head(10) #顯示數據框的前10條記錄
fullData.describe() #你可以使用describe()函數查看數值域的概要
步驟4:確定a)ID變數 b)目標變數 c)分類變數 d)數值變數 e)其他變數。
ID_col =
target_col =
cat_cols =
num_cols= list(set(list(fullData.columns))-set(cat_cols)-set(ID_col)-set(target_col)-set(data_col))
other_col= #為訓練、測試數據集設置標識符
步驟5:識別缺失值變數並創建標志
fullData.isnull().any()#返回True或False,True意味著有缺失值而False相反
num_cat_cols = num_cols+cat_cols # 組合數值變數和分類變數
#為有缺失值的變數創建一個新的變數
# 對缺失值標志為1,否則為0
for var in num_cat_cols:
if fullData.isnull().any()=True:
fullData=fullData.isnull()*1
步驟6:填補缺失值
#用均值填補數值缺失值
fullData = fullData.fillna(fullData.mean(),inplace=True)
#用-9999填補分類變數缺失值
fullData = fullData.fillna(value = -9999)
步驟7:創建分類變數的標簽編碼器,將數據集分割成訓練和測試集,進一步,將訓練數據集分割成訓練集和測試集。
#創建分類特徵的標簽編碼器
for var in cat_cols:
number = LabelEncoder()
fullData = number.fit_transform(fullData.astype('str'))
#目標變數也是分類變數,所以也用標簽編碼器轉換
fullData = number.fit_transform(fullData.astype('str'))
train=fullData='Train']
test=fullData='Test']
train = np.random.uniform(0, 1, len(train)) <= .75
Train, Validate = train=True], train=False]
步驟8:將填補和虛假(缺失值標志)變數傳遞到模型中,我使用隨機森林來預測類。
features=list(set(list(fullData.columns))-set(ID_col)-set(target_col)-set(other_col))
x_train = Train.values
y_train = Train.values
x_validate = Validate.values
y_validate = Validate.values
x_test=test.values
random.seed(100)
rf = RandomForestClassifier(n_estimators=1000)
rf.fit(x_train, y_train)
步驟9:檢查性能做出預測
status = rf.predict_proba(x_validate)
fpr, tpr, _ = roc_curve(y_validate, status)
roc_auc = auc(fpr, tpr)
print roc_auc
final_status = rf.predict_proba(x_test)
test=final_status
test.to_csv('C:/Users/Analytics Vidhya/Desktop/model_output.csv',columns=)
現在可以提交了!

❸ 求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預測樓層越高概率越大

做出模型根據模型算概率。
打將理想狀態絕對無誤差的10個同樣的小球從1~10標號,然後隨機從中選出1個小球。如果選取的次數足夠多,就可以計算各個小球被選取出來的概率。
這是一個隨機數的問題。有個random模塊,專門用來解決這類問題。據說用random選取出來的隨機數都是偽隨機數。不過也沒關系,只需要算出大致的結果就可以了。
每個球選取的概率差不多。選取的次數越多,這個趨勢就越明顯。也就是說,在理想狀態下,所有球被選取的概率是一樣的。
這種選取小球概率的計算方法只是一種理想狀態的演算法。類似於丟硬幣出現正反面的概率,理論上應該是一半對一半,但實際上由於硬幣材質的緣故,丟硬幣的次數越多,正反面出現的概率差距就越大。

❺ 淘寶廣告用戶點擊預測(python)

為提高用戶淘寶廣告點擊率,通過分析淘寶用戶廣告點擊記錄及對應的用戶信息和廣告信息表,用python 進行數據合並後進行數據清洗、提取數據特徵,做特徵工程分析,分析影響用戶點擊廣告的因素,建立簡單邏輯回歸模型,預測用戶是否點擊廣告;

https://tianchi.aliyun.com/dataset/dataDetail?dataId=56

數據集簡介(詳情見數據集鏈接):

數據集一共4個表,因為是廣告點擊預測,就用了前面三個表,表描述如下:

主表:raw_sample

以clk 作為後邏輯回歸模型數據集標簽,後面會改名稱為flag;

數據清洗:

以user id+ time_stamp查看,會有很多重復的記錄。刪除重復時間+用戶ID,設置唯一標識;

查看目前數據集大小:

查看空值:

查看點擊佔比:

ad_feature

數據清洗:

查看重復值:

和主表做關聯生成date1:

查看合並後的空值:

查看點擊佔比:

user_profile

查看重復值:

和date1做關聯生成date2:

最終數據表信息:

查看點擊比例:

刪除不需要做分析的ID標識符欄位:

最終數據表點擊比例:

類別欄位:男女佔比/學生佔比

時間欄位:

數據集只有時間戳欄位,我們從中提取星期數以及對應時間段來看時間趨勢;

查看點擊趨勢:

對星期數再區分以便後面做特徵提取;

同樣對小時進行分組方便後面的特徵處理

連續型欄位處理:

price:

查看廣告價格描述性統計信息:

給廣告價格分區:

時間欄位可以刪除:

查看目前缺失數據,需要填充缺失數據:

    查看缺失佔比,pvalue_level缺失的比較多,用一個特殊的數字填充,這里用的9999.0

空值填充:如果是數值類型,用平均值取代;如果是分類數據,用最常見的類別取代;

查看剩餘連續數據的分布和描述性統計信息:

刪除分完區的原始列:

把sex標准化變成0/1:

目前數據預覽:

Age_leavel/wechat_group 分類太多,後面做特徵編碼的時候生成的特徵太多,對它進行分區:

數據集重命名備份:

對前面提取的特徵用使用get_mmies進行one-hot編碼(類似的做法,就貼三個)

分類列stu我們編碼後保留一個特徵:

相關系數法:計算各個特徵的相關系數

查看各個特徵與點擊情況(flag)的相關系數,ascending=False表示按降序排列:

截取了相關系數前後幾個,都不高,用戶本身廣告點擊率就很低;

廣告價格、資源位、性別、商品類別、周五比較能影響用戶點擊;

根據各個特徵與flag的相關系數大小,選擇了這幾個特徵作為模型的輸入:

建立訓練數據集和測試數據集:

建立邏輯回歸並計算邏輯正確率:

❻ python回歸預測數據怎麼導出

1、使用Pandas庫的to_csv()函數,可以將數據導出為csv格式;
2、使用Python的pickle庫,可以將數據導出為pickle格式;
3、使用NumPy庫的savetxt()函數,可以將數據導出為txt格式;
4、使用Matplotlib庫的savefig()函數,可以將圖表導出為png格式。

❼ 如何在Python中用LSTM網路進行時間序列預測

時間序列模型

時間序列預測分析就是利用過去一段時間內某事件時間的特徵來預測未來一段時間內該事件的特徵。這是一類相對比較復雜的預測建模問題,和回歸分析模型的預測不同,時間序列模型是依賴於事件發生的先後順序的,同樣大小的值改變順序後輸入模型產生的結果是不同的。
舉個栗子:根據過去兩年某股票的每天的股價數據推測之後一周的股價變化;根據過去2年某店鋪每周想消費人數預測下周來店消費的人數等等

RNN 和 LSTM 模型

時間序列模型最常用最強大的的工具就是遞歸神經網路(recurrent neural network, RNN)。相比與普通神經網路的各計算結果之間相互獨立的特點,RNN的每一次隱含層的計算結果都與當前輸入以及上一次的隱含層結果相關。通過這種方法,RNN的計算結果便具備了記憶之前幾次結果的特點。

典型的RNN網路結構如下:

4. 模型訓練和結果預測
將上述數據集按4:1的比例隨機拆分為訓練集和驗證集,這是為了防止過度擬合。訓練模型。然後將數據的X列作為參數導入模型便可得到預測值,與實際的Y值相比便可得到該模型的優劣。

實現代碼

  • 時間間隔序列格式化成所需的訓練集格式

  • import pandas as pdimport numpy as npdef create_interval_dataset(dataset, look_back):

  • """ :param dataset: input array of time intervals :param look_back: each training set feature length :return: convert an array of values into a dataset matrix. """

  • dataX, dataY = [], [] for i in range(len(dataset) - look_back):

  • dataX.append(dataset[i:i+look_back])

  • dataY.append(dataset[i+look_back]) return np.asarray(dataX), np.asarray(dataY)


  • df = pd.read_csv("path-to-your-time-interval-file")

  • dataset_init = np.asarray(df) # if only 1 columndataX, dataY = create_interval_dataset(dataset, lookback=3) # look back if the training set sequence length

  • 這里的輸入數據來源是csv文件,如果輸入數據是來自資料庫的話可以參考這里

  • LSTM網路結構搭建

  • import pandas as pdimport numpy as npimport randomfrom keras.models import Sequential, model_from_jsonfrom keras.layers import Dense, LSTM, Dropoutclass NeuralNetwork():

  • def __init__(self, **kwargs):

  • """ :param **kwargs: output_dim=4: output dimension of LSTM layer; activation_lstm='tanh': activation function for LSTM layers; activation_dense='relu': activation function for Dense layer; activation_last='sigmoid': activation function for last layer; drop_out=0.2: fraction of input units to drop; np_epoch=10, the number of epoches to train the model. epoch is one forward pass and one backward pass of all the training examples; batch_size=32: number of samples per gradient update. The higher the batch size, the more memory space you'll need; loss='mean_square_error': loss function; optimizer='rmsprop' """

  • self.output_dim = kwargs.get('output_dim', 8) self.activation_lstm = kwargs.get('activation_lstm', 'relu') self.activation_dense = kwargs.get('activation_dense', 'relu') self.activation_last = kwargs.get('activation_last', 'softmax') # softmax for multiple output

  • self.dense_layer = kwargs.get('dense_layer', 2) # at least 2 layers

  • self.lstm_layer = kwargs.get('lstm_layer', 2) self.drop_out = kwargs.get('drop_out', 0.2) self.nb_epoch = kwargs.get('nb_epoch', 10) self.batch_size = kwargs.get('batch_size', 100) self.loss = kwargs.get('loss', 'categorical_crossentropy') self.optimizer = kwargs.get('optimizer', 'rmsprop') def NN_model(self, trainX, trainY, testX, testY):

  • """ :param trainX: training data set :param trainY: expect value of training data :param testX: test data set :param testY: epect value of test data :return: model after training """

  • print "Training model is LSTM network!"

  • input_dim = trainX[1].shape[1]

  • output_dim = trainY.shape[1] # one-hot label

  • # print predefined parameters of current model:

  • model = Sequential() # applying a LSTM layer with x dim output and y dim input. Use dropout parameter to avoid overfitting

  • model.add(LSTM(output_dim=self.output_dim,

  • input_dim=input_dim,

  • activation=self.activation_lstm,

  • dropout_U=self.drop_out,

  • return_sequences=True)) for i in range(self.lstm_layer-2):

  • model.add(LSTM(output_dim=self.output_dim,

  • input_dim=self.output_dim,

  • activation=self.activation_lstm,

  • dropout_U=self.drop_out,

  • return_sequences=True)) # argument return_sequences should be false in last lstm layer to avoid input dimension incompatibility with dense layer

  • model.add(LSTM(output_dim=self.output_dim,

  • input_dim=self.output_dim,

  • activation=self.activation_lstm,

  • dropout_U=self.drop_out)) for i in range(self.dense_layer-1):

  • model.add(Dense(output_dim=self.output_dim,

  • activation=self.activation_last))

  • model.add(Dense(output_dim=output_dim,

  • input_dim=self.output_dim,

  • activation=self.activation_last)) # configure the learning process

  • model.compile(loss=self.loss, optimizer=self.optimizer, metrics=['accuracy']) # train the model with fixed number of epoches

  • model.fit(x=trainX, y=trainY, nb_epoch=self.nb_epoch, batch_size=self.batch_size, validation_data=(testX, testY)) # store model to json file

  • model_json = model.to_json() with open(model_path, "w") as json_file:

  • json_file.write(model_json) # store model weights to hdf5 file

  • if model_weight_path: if os.path.exists(model_weight_path):

  • os.remove(model_weight_path)

  • model.save_weights(model_weight_path) # eg: model_weight.h5

  • return model

  • 這里寫的只涉及LSTM網路的結構搭建,至於如何把數據處理規范化成網路所需的結構以及把模型預測結果與實際值比較統計的可視化,就需要根據實際情況做調整了。

    閱讀全文

    與怎麼通過python進行預測相關的資料

    熱點內容
    如何加密qq空間日誌 瀏覽:432
    環衛車壓縮箱有多重 瀏覽:746
    換手率app怎麼沒有自媒體了 瀏覽:407
    安卓如何區分展示機和正品機 瀏覽:371
    java運行和編譯命令 瀏覽:543
    手機解壓30g文件要多久 瀏覽:708
    php讀取文件格式 瀏覽:612
    開發程序員的電影 瀏覽:743
    pc端解壓文件下載 瀏覽:708
    單片機C語言讀寄存器 瀏覽:164
    linux火車源碼 瀏覽:793
    小米手機應用加密怎樣解除 瀏覽:523
    幫孩子解壓的句子 瀏覽:140
    木匠編程 瀏覽:832
    笑話pdf 瀏覽:441
    pdf變形 瀏覽:852
    微信app最下面的菜單欄叫什麼 瀏覽:249
    我的世界晚上七點有什麼伺服器 瀏覽:176
    雲伺服器不見了怎麼辦 瀏覽:965
    怎麼看電腦ntp伺服器地址 瀏覽:579