File size: 2,206 Bytes
bd27e5d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import accuracy_score

class FactoryPredictor:
    def __init__(self):
        self.model = LogisticRegression()
        self.le_diagnosis = LabelEncoder()
        self.temperature = 0
        self.pressure = 0

    def train(self, csv_train='train.csv', csv_test='test.csv'):
        # Load the train data
        data_train = pd.read_csv(csv_train)

        # Encode categorical variables
        data_train['diagnosis'] = self.le_diagnosis.fit_transform(data_train['diagnosis'])

        # Split features and target
        X_train = data_train[
            ['temperature', 'pressure']]
        y_train = data_train['diagnosis']

        # Train the model
        self.model.fit(X_train, y_train)

        # Load the test data
        data_test = pd.read_csv(csv_test)

        # Encode categorical variables
        data_test['diagnosis'] = self.le_diagnosis.fit_transform(data_test['diagnosis'])

        # Split features and target
        X_test = data_test[
            ['temperature', 'pressure']]
        y_test = data_test['diagnosis']

        # Evaluate the model
        y_pred = self.model.predict(X_test)
        accuracy = accuracy_score(y_test, y_pred)
        print(f"Model accuracy: {accuracy:.2f}")

    def inform_temperature(self, temperature):
        self.temperature = temperature
        if self.pressure > 0:
            return self.predict(self.temperature, self.pressure)
        return 'N'

    def inform_pressure(self, pressure):
        self.pressure = pressure
        if self.temperature > 0:
            return self.predict(self.temperature, self.pressure)
        return 'N'

    def predict(self, temperature, pressure):
        # Create a DataFrame with the same feature names as the training data
        input_data = pd.DataFrame(
            [[temperature, pressure]],
            columns=['temperature', 'pressure'])

        # Make prediction
        prediction = self.model.predict(input_data)

        # Decode prediction
        diagnosis = self.le_diagnosis.inverse_transform(prediction)[0]

        return diagnosis