日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python建模分析实操_R和Python在数据建模方面的风格差异分析(下)

發布時間:2023/12/18 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python建模分析实操_R和Python在数据建模方面的风格差异分析(下) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

廢話不多說,接著上一篇分析講。

3.創建神經網絡模型R

與R中同樣使用Python的先前示例類似,我們將使用Keras作為創建神經網絡的關鍵包。我們還需要安裝tensorflow并reticulate運行我們的模型。Keras的使用允許在兩種編碼語言之間的編碼中使用非常相似的樣式。

library(keras)library(tensorflow)library(reticulate)library(kerasR)

第一步仍然是創建或上傳相關數據框,作為進行分析的基礎。在此示例中,我們將隨機生成一個數據集來模擬R中的代碼。像前面的示例一樣,收到的援助的預測(Y)是電擊類型和位置(X1,X2)的函數。通過使用命令指定屬性,我們還可以將數字目標變量轉換為分類變量ifelse。

df <- data.frame(replicate(1,sample(0:1000, 1000, rep=TRUE)))colnames(df) <- c("AidMillion")df$Aid_Given <- ifelse(df$AidMillion <= 500, "Above_500_Mill", "Below_500_Mill")df$TypeShock <- sample(c('Draught','Floods','Famine'), size = nrow(df), replace = TRUE)df$Location <- sample(c('Urban','Rural'), size = nrow(df), replace = TRUE)

為了具有適合分析的變量,我們需要將分類變量轉換為數值變量。在R中,我們的預測變量和目標變量的轉換要求通過as.factor 和as.numeric命令將每個分類分別轉換為因子和整數。為了將目標變量轉換為零和一值,我們可以依靠ifelse表達相關條件。隨后,我們可以將數據幀拆分為一個測試,并通過命令進行訓練runif。

df$LocationNum<-as.numeric(factor(df$Location))df$TypeShockNum<-as.numeric(factor(df$TypeShock))df$Aid_GivenNum<-ifelse(df$Aid_Given=="Above_500_Mill",1,0)set.seed(8)n<- dim(df)[1]train_df<-runif(n)<0.60df_train<- as.data.frame(df[train_df, ])df_test<- as.data.frame(df[!train_df, ])head(df)

在所有變量均采用數值格式后,在R中創建合適的目標變量和預測變量也需要進一步操作,以確保目標變為數組,預測變量為矩陣。與Python相比,這需要額外的步驟,因為變量的選擇不能與arrayand data.matrix命令結合使用。這需要單獨完成,而Python中的numpy允許組合轉換。

X <- df_train[c("TypeShockNum","LocationNum")]y <- df_train[c("Aid_GivenNum")]X_t <- df_test[c("TypeShockNum","LocationNum")]y_t<- df_test[c("Aid_GivenNum")]X_train <- data.matrix(X)Y_train <- array(y$Aid_GivenNum)X_test <- data.matrix(X_t)Y_test <- array(y_t$Aid_GivenNum)

一旦變量被轉換,我們將定義模型。R的這一步驟在樣式方面與Python絕對相似,但有一些細微差別。定義順序模型后,我們將使用美元符號添加圖層和輟學函數。在第一層中,參數的唯一區別是語義。例如,我們將使用而不是input_dim input_shape來表示預測變量的數量。其余的仍然非常相似,包括其他參數的名稱。

mod <- Sequential()model$add(Dense(units=3, activity_regularizer=regularizer_l1(0.001), input_shape = ncol(X_train), activation="sigmoid"))model$add(Dropout(rate = 0.1))model$add(Dense(units = 2))model$add(Dropout(rate = 0.1))model$add(Dense(units = 1))model

一旦定義了模型,就可以對其進行編譯了。在R中,這是通過keras_compile命令完成的,同時保持大多數參數的定義與Python上例中用于損失函數和優化的方法相同。一旦定義了編譯標準,就可以根據與Python中表示的參數相同的措詞將模型擬合到訓練變量。報告中沒有重大差異,只是在措詞上有一些變化,例如需要list在驗證數據規范之前添加以及在函數內部插入模型。為了顯示結果,在R中更容易,因為我們可以調用函數的結果來查看它們,而無需進一步的評估命令。

就損失函數而言,此模擬的最終結果是可以接受的,但是精度仍然太低。

keras_compile(model, loss = 'binary_crossentropy', optimizer = RMSprop(), metrics = c('accuracy'))history <-fit(model, X_train, Y_train, batch_size = 30, epochs = 250, verbose = 0, validation_data = list(X_test, Y_test))history

4.繪制模型并在R和Python中進行預測

一旦模型生成了相關的預測,我們就可以得出結果,以查看在各個迭代(歷元)中損失和準確性結果的進展。在Python中,這很耗時,因為我們需要定義繪圖的各種參數來繪制模型在準確性和損失方面的表現。下面的結果表明,在第50次迭代之后,準確性有了顯著提高,損失函數也有所下降。

plt.plot(history.history ['accuracy'])

plt.plot(history.history ['val_accuracy'])

plt.title('modelprecision ')plt.ylabel('accuracy')

plt.xlabel('epoch' )

plt.legend(['train','test'],loc ='upper left')

plt.show()plt.plot(history.history ['loss'])

plt.plot(history.history ['val_loss '])

plt.title('model loss')

plt.ylabel('loss')

plt.xlabel('epoch')

plt.legend(['train','test'],loc ='upper left')

plt.show()

另一方面,在R中繪制模型的損失和準確性的進程要容易得多。只需調用plot函數,我們就可以訪問損失和準確性函數的趨勢。這是多少R是一種視覺聚焦語言的證明,可以很容易地生成相關圖。再次,我們可以看到我們的模型在第50個時期(即數據集上的迭代)有了顯著改善。

plot(history)

最后,我們可以將預測值添加到測試數據集中以進一步驗證其一致性。在Python中,predict和的舍入函數的組合可以生成一系列預測值,我們可以在測試數據集中使用該預測值進行進一步分析。

predictions = model.predict(X_test)predictions = [round(x[0]) for x in predictions]X_test['predictions'] = predictionsX_test.head(7)

同樣,在R中,我們可以預測應用于測試數據集的值,將它們四舍五入,并通過使用美元符號來創建一個新變量來進行比較。除了語義上的一些更改外,該方法仍然是命令預測為測試樣本中的輸入樣本生成輸出預測。

pred <- predict(model, (X_test))df_test$pred <-round(pred, digits = 0)head(df_test,5)

5.最后的反思

盡管可以大大改善這些模型的輸出,但此博客的目的是說明從Keras中創建神經網絡時,從樣式角度看R和Python的相似之處。事實是,神經網絡可能比到目前為止的例子復雜得多。它可以是多層感知器,卷積網絡或遞歸網絡。它可以具有共享的特征提取層,多個輸入或多個輸出。盡管這是一個不斷發展的領域,但對基本概念的基本理解可能足以模擬神經網絡。這可以作為我們通過測試各種參數和優化功能來不斷改進和建立已知知識的基礎。

總結

以上是生活随笔為你收集整理的python建模分析实操_R和Python在数据建模方面的风格差异分析(下)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。