Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pandas as pd | |
| from sklearn.model_selection import train_test_split | |
| from sklearn.svm import SVC | |
| from sklearn.ensemble import StackingClassifier, VotingClassifier | |
| from sklearn.linear_model import LogisticRegression | |
| from sklearn.tree import DecisionTreeClassifier | |
| from sklearn.ensemble import RandomForestClassifier | |
| from sklearn.metrics import accuracy_score | |
| # 定義每個分類方法的模型 | |
| def get_classifier(classifier_name): | |
| if classifier_name == 'SVM': | |
| clf = SVC(kernel='linear', probability=True) | |
| elif classifier_name == '堆疊法': | |
| estimators = [ | |
| ('lr', LogisticRegression()), | |
| ('rf', RandomForestClassifier()), | |
| ('dt', DecisionTreeClassifier()) | |
| ] | |
| clf = StackingClassifier(estimators=estimators, final_estimator=SVC()) | |
| elif classifier_name == '軟投票': | |
| clf1 = LogisticRegression() | |
| clf2 = RandomForestClassifier() | |
| clf3 = SVC(probability=True) | |
| clf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('svc', clf3)], voting='soft') | |
| else: # 硬投票 | |
| clf1 = LogisticRegression() | |
| clf2 = RandomForestClassifier() | |
| clf3 = SVC() | |
| clf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('svc', clf3)], voting='hard') | |
| return clf | |
| # 加載數據集 | |
| def load_data(file): | |
| data = pd.read_csv(file) | |
| X = data.iloc[:, :-1].values # 特徵變量 | |
| y = data.iloc[:, -1].values # 目標變量 | |
| return X, y | |
| # 設定 Streamlit 標題 | |
| st.title("分類模型選擇器") | |
| # 上傳 CSV 文件 | |
| uploaded_file = st.file_uploader("上傳 CSV 文件作為數據集", type="csv") | |
| if uploaded_file is not None: | |
| # 加載數據集 | |
| X, y = load_data(uploaded_file) | |
| # 分割數據集 | |
| X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) | |
| # 選擇分類器 | |
| classifier_name = st.selectbox( | |
| '選擇分類器', | |
| ('SVM', '堆疊法', '軟投票', '硬投票') | |
| ) | |
| # 獲取並訓練模型 | |
| clf = get_classifier(classifier_name) | |
| clf.fit(X_train, y_train) | |
| # 預測結果 | |
| y_pred = clf.predict(X_test) | |
| # 計算準確率 | |
| acc = accuracy_score(y_test, y_pred) | |
| # 顯示結果 | |
| st.write(f'分類器 = {classifier_name}') | |
| st.write(f'準確率 = {acc:.2f}') | |