【好文】带你用Python开发个机器学习软件!

141 阅读3分钟
原文链接: click.aliyun.com
class MainWindow(QMainWindow, Ui_MainWindow):
   """
   Class documentation goes here.
   """
   def __init__(self, parent=None):
       """
       Constructor
       
       @param parent reference to the parent widget
       @type QWidget
       """
       super(MainWindow, self).__init__(parent)
       self.setupUi(self)
       
   def model_plot(self, y_true,model_pre):
       '''
       y_true:真实的label
       model_pre: 预测的数据(数据框)
       '''
       cols = model_pre.columns
       plt.style.use("ggplot")
       plt.figure(figsize=(24,24))
       plt.rcParams['font.sans-serif'] = ['FangSong'] 
       plt.rcParams['axes.unicode_minus'] = False 
       for i in range(6):
           plt.subplot(2,3,i+1)
           plt.scatter(x=range(len(y_true)),y=y_true,label='true')
           plt.scatter(x=range(len(model_pre[cols[i]])),y=model_pre[cols[i]],label=cols[i])
           plt.title(str(cols[i])+':真实Label Vs 预测Label')
           plt.legend()
   
       plt.savefig("model_plot.png")
   
   @pyqtSlot()
   def on_pushButton_clicked(self):
       """
       Slot documentation goes here.
       """
       # TODO: not implemented yet
       print("加载数据")
       
       boston = datasets.load_boston()
       train = boston.data
       target = boston.target
       
       self.X_train,self.x_test,self.y_train,self.y_true = train_test_split(train,target,test_size=0.2)
   
   @pyqtSlot()
   def on_pushButton_2_clicked(self):
       """
       Slot documentation goes here.
       """
       # TODO: not implemented yet
       print("模型预测")
       
       # 模型加载
       lr_m = joblib.load("model/LR_model.m")
       rr_m = joblib.load("model/RR_model.m")
       llr_m = joblib.load("model/LLR_model.m")
       knnr_m = joblib.load("model/KNNR_model.m")
       dr_m = joblib.load("model/DR_model.m")
       svmr_m = joblib.load("model/SVMR_model.m")
       
       try:
           y_LR = lr_m.predict(self.x_test)
           y_RR = rr_m.predict(self.x_test)
           y_LLR = llr_m.predict(self.x_test)
           y_KNNR = knnr_m.predict(self.x_test)
           y_DR = dr_m.predict(self.x_test)
           y_SVMR = svmr_m.predict(self.x_test)
           
           
           model_pre = pd.DataFrame({'LinearRegression()':list(y_LR),'Ridge()':list(y_RR),'Lasso()':list(y_LLR), \
           'KNeighborsRegressor()':list(y_KNNR),'DecisionTreeRegressor()':list(y_DR),'SVR()':list(y_SVMR)})
           
           self.model_plot(self.y_true, model_pre)
           self.graphicsView.setStyleSheet("border-image: url(model_plot.png);")

           
       except:
           my_button_w3=QMessageBox.warning(self,"严重警告", '请务必先加载数据然后再点击模型预测!!!', QMessageBox.Ok|QMessageBox.Cancel,  QMessageBox.Ok)  
           

   
   @pyqtSlot()
   def on_action_triggered(self):
       """
       Slot documentation goes here.
       """
       # TODO: not implemented yet
       print('打开')
       my_button_open = QMessageBox.about(self, '打开', '点击我打开某些文件')
   
   @pyqtSlot()
   def on_action_2_triggered(self):
       """
       Slot documentation goes here.
       """
       # TODO: not implemented yet
       print('关闭')
       sys.exit(0)
   
   @pyqtSlot()
   def on_action_3_triggered(self):
       """
       Slot documentation goes here.
       """
       # TODO: not implemented yet
       print('联系我们')
       my_button_con_me = QMessageBox.about(self, '联系我们', '这个位置放的是联系我们的介绍')
   
   @pyqtSlot()
   def on_action_4_triggered(self):
       """
       Slot documentation goes here.
       """
       # TODO: not implemented yet
       print('关于我们')
       my_button_about_me = QMessageBox.about(self, '关于我们', '这个位置放的是关于我们的介绍')
       
   
   @pyqtSlot()
   def on_action_QT_triggered(self):
       """
       Slot documentation goes here.
       """
       # TODO: not implemented yet
       print('关于qt')
       my_button_about_QT = QMessageBox.aboutQt(self, '关于QT')
       


if __name__ == "__main__":
   import sys
   app = QtWidgets.QApplication(sys.argv)
   splash = QSplashScreen(QtGui.QPixmap(':/my_pic/pic/face.png'))
   splash.show()
   QThread.sleep(0.5)
   splash.showMessage('正在加载机器学习算法...' )
   QThread.sleep(1)
   splash.showMessage('正在初始化程序...')
   QThread.sleep(0.5)
   #splash.show()
   app. processEvents()
   ui =MainWindow()
   # ui.setDaemon(True`)
   # ui.start()
   ui.show()
   splash.finish(ui)
   sys.exit(app.exec_())