KKingzor's picture
Update app.py
70a5d73 verified
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}')