{"id":3515,"date":"2026-01-05T11:12:58","date_gmt":"2026-01-05T10:12:58","guid":{"rendered":"https:\/\/neuraldesigner.com\/learning\/power-plant-gas-emissions-nox\/"},"modified":"2026-03-13T10:30:00","modified_gmt":"2026-03-13T09:30:00","slug":"power-plant-gas-emissions-nox","status":"publish","type":"learning","link":"https:\/\/www.neuraldesigner.com\/learning\/examples\/power-plant-gas-emissions-nox\/","title":{"rendered":"Reduce emissions from a power plant with machine learning"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"3515\" class=\"elementor elementor-3515\" data-elementor-post-type=\"learning\">\n\t\t\t\t<div class=\"elementor-element elementor-element-62dc8c8 e-flex e-con-boxed e-con e-parent\" data-id=\"62dc8c8\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-512cf11 elementor-widget elementor-widget-text-editor\" data-id=\"512cf11\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p class=\"post\"><span style=\"color: var( --e-global-color-text ); font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-size: var( --e-global-typography-text-font-size ); font-weight: var( --e-global-typography-text-font-weight );\">A combined-cycle power plant comprises gas turbines, steam turbines, and heat recovery steam generators.<\/span><\/p><p>In this type of plant, the electricity is generated by gas and steam turbines combined in one cycle. Then, it is transferred from one turbine to another.<\/p><p>This process entails the emission of some gas pollutants such as NOx (nitrogen oxides), harmful to our health. Predicting peaks in such emissions might give us a chance to put preventive actions in motion.<\/p><p>This example models the NOx levels to give us essential information about the power plant&#8217;s emissions and reduce them.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-79d3717 elementor-widget elementor-widget-text-editor\" data-id=\"79d3717\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h3>Contents<\/h3><ol><li><a href=\"#ApplicationType\">Application type<\/a>.<\/li><li><a href=\"#DataSet\">Data set<\/a>.<\/li><li><a href=\"#NeuralNetwork\">Neural network<\/a>.<\/li><li><a href=\"#TrainingStrategy\">Training strategy<\/a>.<\/li><li><a href=\"#ModelSelection\">Model selection<\/a>.<\/li><li><a href=\"#TestingAnalysis\">Testing analysis<\/a>.<\/li><li><a href=\"#ModelDeployment\">Model deployment<\/a>.<\/li><\/ol><p>This example is solved with <a href=\"https:\/\/www.neuraldesigner.com\/\">Neural Designer<\/a>. You can use the <a href=\"https:\/\/www.neuraldesigner.com\/downloads\">free trial<\/a> to understand how the solution is achieved step by step.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-cd1b104 e-con-full e-flex e-con e-child\" data-id=\"cd1b104\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-345d0ef elementor-align-center elementor-widget elementor-widget-button\" data-id=\"345d0ef\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"http:\/\/www.neuraldesigner.com\/downloads\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-download\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Download<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7726adb elementor-widget elementor-widget-text-editor\" data-id=\"7726adb\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<section id=\"ApplicationType\"><h2>1. Application type<\/h2><p>This is an <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/neural-networks-applications#Approximation\">approximation<\/a> project since the variable to be predicted is continuous (NOx emission levels).<\/p><p>The fundamental goal here is to model pollutant emissions as a function of the environmental and control variables.<\/p><\/section><section id=\"DataSet\"><h2>2. Data set<\/h2><p>The <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/data-set\">data set<\/a> contains three concepts:<\/p><ul><li>Data source.<\/li><li>Variables.<\/li><li>Instances.<\/li><\/ul><p>The data file <a href=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/10\/power-plant-gas-emissions.csv\">power_plant_gas_emissions.csv<\/a> contains 36733 samples with 11 variables aggregated over one hour from a gas turbine located in Turkey&#8217;s northwestern region between the years 2011-2015.<\/p><p>The <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/data-set#Variables\">variables<\/a>, or features, are the following:<\/p><ul><li><b>ambient_temperature<\/b>, in degrees Celsius.<\/li><li><b>ambient_pressure<\/b>, in millibars.<\/li><li><b>ambient_humidity<\/b>, as a percentage.<\/li><li><b>air_filter_difference_pressure<\/b>, difference of pressure in the air filter, in millibars.<\/li><li><b>gas_turbine_exhaust_pressure<\/b>, pressure of the combustion chamber exhaust gases, in millibar.<\/li><li><b>turbine_inlet_temperature<\/b>, temperature of the combustion chamber exhaust gases as they enter the turbine unit, in degrees Celsius.<\/li><li><b>turbine_after_temperature<\/b>, temperature of the combustion chamber exhaust gases as they exit the turbine unit, in degrees Celsius.<\/li><li><b>compressor_discharge_pressure<\/b>, pressure of the gases expelled by the compressor, in millibars.<\/li><li><b>turbine_energy_yield<\/b>, total energy yielded by the turbine in an hour, in Megawatts per hour.<\/li><li><b>NOx<\/b>, concentration of nitrogen oxides, in milligrams per cubic meter.<\/li><\/ul><p>Our <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/data-set#TargetVariables\">target variable<\/a> will be the last one, NOx.<\/p><p>The <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/data-set#Instances\">instances<\/a> are divided into training, selection, and testing subsets. They represent 60%, 20%, and 20% of the original instances, respectively, and are split at random.<\/p><p>Calculating the data <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/data-set#Distributions\">distributions<\/a>\u00a0helps us check for the correctness of the available information and detect anomalies. The following chart shows the histogram for the NOx variable:<\/p><p><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/images\/power-plant-NOx-distribution.webp\" \/><\/p><p>We can see a normal distribution in the NOx histogram.<\/p><p>It is also interesting to look for dependencies between a single input and single target variables. To do that, we can plot an <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/data-set#InputsTargetsCorrelations\">inputs-targets correlations<\/a> chart.<\/p><p>For the NOx we have:<\/p><p><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/images\/power-plant-NOx-correlations.webp\" \/><\/p><p>In this case, the highest correlation is with the ambient temperature (the higher the temperature is, the less NOx is emitted).<\/p><p>Next, we plot a <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/data-set#ScatterCharts\">scatter chart<\/a> for the most significant correlations for our target variable.<\/p><p><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/images\/power-plant-NOx-vs-ambient-temperature.webp\" \/><\/p><p>As we saw earlier, the higher the ambient temperature, the less gas is emitted by the power plant.<\/p><\/section>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d7cced0 elementor-widget elementor-widget-text-editor\" data-id=\"d7cced0\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h2>3. Neural network<\/h2><p>The second step is to build a <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/neural-network\">neural network<\/a> that represents the approximation function. Approximation problems, it is usually composed by:<\/p><ul><li>Scaling layer.<\/li><li>Perceptron layers.<\/li><li>Unscaling layer.<\/li><\/ul><p>The neural network has nine inputs (ambient temperature, ambient pressure, ambient humidity, air filter difference pressure, gas turbine exhaust pressure, turbine inlet temperature, turbine after temperature, compressor discharge pressure, and turbine energy yield) and one output (NOx).<\/p><p>The <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/neural-network#ScalingLayer\">scaling layer<\/a> contains the statistics of the inputs. We use the automatic setting for this layer to accommodate the best scaling technique for our data.<\/p><p>We use 2 perceptron layers here:<\/p><ul><li>The first perceptron layer has 9 inputs, 3 neurons, and a <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/neural-network#HyperbolicTangentActivationFunction\">hyperbolic tangent activation function<\/a>.<\/li><li>The second perceptron layer has 3 inputs, 2 neurons, and a <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/neural-network#LinearActivationFunction\">linear activation function<\/a>.<\/li><\/ul><p>The <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/neural-network#UnscalingLayer\">unscaling layer<\/a> contains the statistics of the outputs. We use the automatic method as before.<\/p><p>The next graph represents the neural network for this example.<\/p><p><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/images\/power-plant-emission-initial-neural-network.webp\" \/><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cf439df elementor-widget elementor-widget-text-editor\" data-id=\"cf439df\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h2>4. Training strategy<\/h2><p>The fourth step is to select an appropriate <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/training-strategy\">training strategy<\/a>. It is composed of two parameters:<\/p><ul><li>Loss index.<\/li><li>Optimization algorithm.<\/li><\/ul><p>The <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/training-strategy#LossIndex\">loss index<\/a> defines what the neural network will learn. It is composed of an <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/training-strategy#ErrorTerm\">error term<\/a> and a <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/training-strategy#RegularizationTerm\">regularization term<\/a>.<\/p><p>The error term chosen is the <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/training-strategy#NormalizedSquaredError\">normalized squared error<\/a>. It divides the squared error between the outputs from the neural network and the targets in the data set by its normalization coefficient. If the normalized squared error has a value of 1, then the neural network is predicting the data &#8216;in the mean&#8217;, while a value of zero means a perfect prediction of the data. This error term does not have any parameters to set.<\/p><p>The regularization term is the <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/training-strategy#L2Regularization\">L2 regularization<\/a>. It is applied to control the complexity of the neural network by reducing the value of the parameters. We use a weak weight for this regularization term.<\/p><p>The <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/training-strategy#OptimizationAlgorithm\">optimization algorithm<\/a> is in charge of searching for the neural network parameters that minimize the loss index. Here we chose the <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/training-strategy#QuasiNewtonMethod\">quasi-Newton method<\/a> as optimization algorithm.<\/p><p><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/images\/power-plant-emission-training-history.webp\" \/><\/p><p>The following chart shows how the training (blue) and selection (orange) errors decrease with the epochs during the training process. The final values are <b>training error = 0.260 NSE<\/b> and <b>selection error = 0.263 NSE<\/b>, respectively.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-58024a2 elementor-widget elementor-widget-text-editor\" data-id=\"58024a2\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h2>5. Model selection<\/h2><p>The objective of <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/model-selection\">model selection<\/a> is to find the network architecture with the best generalization properties. We want to improve the final selection error obtained before (0.263 NSE).<\/p><p>The best selection error is achieved using a model with the most appropriate complexity to produce a good data fit.\u00a0<a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/model-selection#OrderSelection\">Order selection<\/a> algorithms are responsible for finding the optimal number of perceptrons in the neural network.<\/p><p>The following chart shows the results of the <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/model-selection#IncrementalOrder\">incremental order<\/a> algorithm. The blue line plots the final training error as a function of the number of neurons. The orange line plots the final selection error as a function of the number of neurons.<\/p><p><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/images\/power-plant-emission-order-selection.webp\" \/><\/p><p>As we can see, the final training error continuously decreases with the number of neurons. However, the final selection error takes a minimum value at some point. Here, the optimal number of neurons is 8, corresponding to a selection error of <b>0.224 NSE<\/b>.<\/p><p>The following figure shows the optimal network architecture for this application.<\/p><p><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/images\/power-plant-final-architecture.webp\" \/><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-68dc057 elementor-widget elementor-widget-text-editor\" data-id=\"68dc057\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h2>6. Testing analysis<\/h2><p>The purpose of the <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/testing-analysis\">testing analysis<\/a> is to validate the generalization capabilities of the neural network. We use the <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/data-set#TestingInstances\">testing instances<\/a> in the data set, which have never been used before.<\/p><p>A standard testing method in approximation applications is to perform a <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/testing-analysis#LinearRegressionAnalysis\">linear regression analysis<\/a> between the predicted and the real pollutant level values.<\/p><p><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/images\/power-plant-NOx-linear-regression-analysis.webp\" \/><\/p><p>For a perfect fit, the correlation coefficient R2 would be 1. As we have <b>R2 = 0.889<\/b>, the neural network predicts the testing data quite well.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7d93034d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7d93034d\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-239f2c05\" data-id=\"239f2c05\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5423de9c elementor-widget elementor-widget-text-editor\" data-id=\"5423de9c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<section><\/section><section id=\"ApplicationType\"><\/section><section id=\"DataSet\"><\/section><section id=\"NeuralNetwork\"><\/section><section id=\"TrainingStrategy\"><\/section><section id=\"ModelSelection\"><p>\u00a0<\/p><\/section><section id=\"TestingAnalysis\"><p>\u00a0<\/p><\/section><section id=\"ModelDeployment\"><h2>7. Model deployment<\/h2><p>In the <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/model-deployment\">model deployment<\/a> phase, the neural network is used to predict outputs for inputs that it has never seen.<\/p><p>We can calculate the <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/model-deployment#NeuralNetworkOutputs\">neural network outputs<\/a> for a given set of inputs:<\/p><ul><li><b>ambient_temperature<\/b>: 17.713 degrees Celsius.<\/li><li><b>ambient_pressure<\/b>: 1013.07 millibars.<\/li><li><b>ambient_humidity<\/b>: 77.867 %.<\/li><li><b>air_filter_difference_pressure<\/b>: 3.926 millibars.<\/li><li><b>gas_turbine_exhaust_pressure<\/b>: 25.56 millibars.<\/li><li><b>turbine_inlet_temperature<\/b>: 1081.44 degrees Celsius.<\/li><li><b>turbine_after_temperature<\/b>: 546.161 degrees Celsius.<\/li><li><b>compressor_discharge_pressur<\/b>e: 133.506 millibars.<\/li><li><b>turbine_energy_yield<\/b>: 12.061 Megawatts per hour.<\/li><li><b>NOx<\/b>: 67.518 milligrams per cubic meter.<\/li><\/ul><p>We can also use <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/model-deployment#ResponseOptimization\">Response Optimization<\/a>. The objective of the response optimization algorithm is to exploit the mathematical model to look for optimal operating conditions. Indeed, the predictive model allows us to simulate different operating scenarios and adjust the control variables to improve efficiency.<\/p><p>An example is to minimize gas turbine exhaust pressure while maintaining the NOx level below the desired value.<\/p><p>The next table resumes the conditions for this problem.<\/p><div style=\"overflow-x: auto;\"><table><tbody><tr><th>Variable name<\/th><th>Condition<\/th><th>\u00a0<\/th><\/tr><tr><th>Ambient temperature<\/th><td style=\"text-align: right;\">None<\/td><td style=\"text-align: right;\">\u00a0<\/td><\/tr><tr><th>Ambient pressure<\/th><td style=\"text-align: right;\">None<\/td><td style=\"text-align: right;\">\u00a0<\/td><\/tr><tr><th>Ambient humidity<\/th><td style=\"text-align: right;\">None<\/td><td style=\"text-align: right;\">\u00a0<\/td><\/tr><tr><th>Air filter difference pressure<\/th><td style=\"text-align: right;\">None<\/td><td style=\"text-align: right;\">\u00a0<\/td><\/tr><tr><th>Gas turbine exhaust pressure<\/th><td style=\"text-align: right;\">Minimize<\/td><td style=\"text-align: right;\">\u00a0<\/td><\/tr><tr><th>Turbine inlet temperature<\/th><td style=\"text-align: right;\">None<\/td><td style=\"text-align: right;\">\u00a0<\/td><\/tr><tr><th>Turbine after temperature<\/th><td style=\"text-align: right;\">None<\/td><td style=\"text-align: right;\">\u00a0<\/td><\/tr><tr><th>Compressor discharge pressure<\/th><td style=\"text-align: right;\">None<\/td><td style=\"text-align: right;\">\u00a0<\/td><\/tr><tr><th>Turbine energy yield<\/th><td style=\"text-align: right;\">None<\/td><td style=\"text-align: right;\">\u00a0<\/td><\/tr><tr><th>NOx<\/th><td style=\"text-align: right;\">Less than or equal to<\/td><td style=\"text-align: right;\">80<\/td><\/tr><\/tbody><\/table><\/div><p>The next list shows the optimum values for previous conditions.<\/p><ul><li><b>ambient_temperature<\/b>: 21.2745 degrees Celsius.<\/li><li><b>ambient_pressure<\/b>: 1033.75 millibars.<\/li><li><b>ambient_humidity<\/b>: 53.3598 %.<\/li><li><b>air_filter_difference_pressure<\/b>: 6.02753 millibars.<\/li><li><b>gas_turbine_exhaust_pressur<\/b>e: 17.8926 millibars.<\/li><li><b>turbine_inlet_temperature<\/b>: 1008.55 degrees Celsius.<\/li><li><b>turbine_after_temperature<\/b>: 515.503 degrees Celsius.<\/li><li><b>compressor_discharge_pressure<\/b>: 136.975 millibars.<\/li><li><b>turbine_energy_yield<\/b>: 15.0443 Megawatts per hour.<\/li><li><b>NOx<\/b>: 40.7311 milligrams per cubic meter.<\/li><\/ul><p><a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/model-deployment#DirectionalOutputs\">Directional outputs<\/a> plot the neural network outputs through some reference points.<\/p><p>The next list shows the reference points for the plots.<\/p><ul><li><b>ambient_temperature<\/b>: 17.713 degrees Celsius.<\/li><li><b>ambient_pressure<\/b>: 1013.07 millibars.<\/li><li><b>ambient_humidity<\/b>: 77.867 %.<\/li><li><b>air_filter_difference_pressure<\/b>: 3.926 millibars.<\/li><li><b>gas_turbine_exhaust_pressure<\/b>: 25.56 millibars.<\/li><li><b>turbine_inlet_temperature<\/b>: 1081.44 degrees Celsius.<\/li><li><b>turbine_after_temperature<\/b>: 546.161 degrees Celsius.<\/li><li><b>compressor_discharge_pressure<\/b>: 133.506 millibars.<\/li><li><b>turbine_energy_yield<\/b>: 12.061 Megawatts per hour.<\/li><\/ul><p>We can see here how the turbine inlet temperature affects NOx emissions:<\/p><p><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/images\/power-plant-NOx-turbine-inlet-temperature-directional-output.webp\" \/><\/p><p>Decreasing the turbine inlet temperature decreases NOx emissions.<\/p><p>This insight into our model can help us take preventive action against pollutant emissions. For example, if we calculate the neural network outputs again, simply decreasing the turbine inlet temperature by 10 degrees Celsius leads to a decrease in NOx levels from the previous 64.759 to 54.388 milligrams per cubic meter, which corresponds to a <b>19.45% decrease<\/b> of this pollutant.<\/p><p>We are using the turbine inlet temperature to reduce NOx levels because it might be easy to change its value, but, using directional outputs, we could analyze any of our variables for this purpose.<\/p><p>The <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/model-deployment#MathematicalExpression\">mathematical expression<\/a> represented by the predictive model is displayed next:<\/p><pre>scaled_ambient_temperature = ambient_temperature*(1+1)\/(37.10300064-(-6.234799862))+6.234799862*(1+1)\/(37.10300064+6.234799862)-1;\nscaled_ambient_pressure = ambient_pressure*(1+1)\/(1036.599976-(985.8499756))-985.8499756*(1+1)\/(1036.599976-985.8499756)-1;\nscaled_ambient_humidity = ambient_humidity*(1+1)\/(100.1999969-(24.08499908))-24.08499908*(1+1)\/(100.1999969-24.08499908)-1;\nscaled_air_filter_difference_pressure = (air_filter_difference_pressure-(3.925529957))\/0.7738839984;\nscaled_gas_turbine_exhaust_pressure = gas_turbine_exhaust_pressure*(1+1)\/(40.7159996-(17.69799995))-17.69799995*(1+1)\/(40.7159996-17.69799995)-1;\nscaled_turbine_inlet_temperature = turbine_inlet_temperature*(1+1)\/(1100.900024-(1000.799988))-1000.799988*(1+1)\/(1100.900024-1000.799988)-1;\nscaled_turbina_after_temperature = turbina_after_temperature*(1+1)\/(550.6099854-(511.0400085))-511.0400085*(1+1)\/(550.6099854-511.0400085)-1;\nscaled_compressor_discharge_pressure = compressor_discharge_pressure*(1+1)\/(179.5-(100.0199966))-100.0199966*(1+1)\/(179.5-100.0199966)-1;\nscaled_turbine_energy_yield = turbine_energy_yield*(1+1)\/(15.1590004-(9.851799965))-9.851799965*(1+1)\/(15.1590004-9.851799965)-1;\n\nperceptron_layer_output_0 = tanh[ 0.60353 + (scaled_ambient_temperature*-0.898015)+ (scaled_ambient_pressure*0.106922)+ (scaled_ambient_humidity*0.0251374)+ (scaled_air_filter_difference_pressure*0.157952)+ (scaled_gas_turbine_exhaust_pressure*0.0218472)+ (scaled_turbine_inlet_temperature*-0.164147)+ (scaled_turbina_after_temperature*-0.60252)+ (scaled_compressor_discharge_pressure*0.0372741)+ (scaled_turbine_energy_yield*-0.122605) ];\nperceptron_layer_output_1 = tanh[ -0.39564 + (scaled_ambient_temperature*0.219474)+ (scaled_ambient_pressure*-0.25537)+ (scaled_ambient_humidity*-0.483382)+ (scaled_air_filter_difference_pressure*-0.0634254)+ (scaled_gas_turbine_exhaust_pressure*-0.356299)+ (scaled_turbine_inlet_temperature*0.549859)+ (scaled_turbina_after_temperature*-0.482046)+ (scaled_compressor_discharge_pressure*-0.953468)+ (scaled_turbine_energy_yield*-0.14656) ];\nperceptron_layer_output_2 = tanh[ 0.494716 + (scaled_ambient_temperature*0.0897735)+ (scaled_ambient_pressure*-0.133677)+ (scaled_ambient_humidity*-0.517657)+ (scaled_air_filter_difference_pressure*-0.221637)+ (scaled_gas_turbine_exhaust_pressure*-0.0186443)+ (scaled_turbine_inlet_temperature*0.0874258)+ (scaled_turbina_after_temperature*-0.39384)+ (scaled_compressor_discharge_pressure*-0.0960564)+ (scaled_turbine_energy_yield*0.0626058) ];\nperceptron_layer_output_3 = tanh[ -0.204665 + (scaled_ambient_temperature*0.531847)+ (scaled_ambient_pressure*-0.204711)+ (scaled_ambient_humidity*-0.273068)+ (scaled_air_filter_difference_pressure*-0.048272)+ (scaled_gas_turbine_exhaust_pressure*-0.267754)+ (scaled_turbine_inlet_temperature*-0.780598)+ (scaled_turbina_after_temperature*-0.0720181)+ (scaled_compressor_discharge_pressure*-0.0557694)+ (scaled_turbine_energy_yield*-0.551703) ];\nperceptron_layer_output_4 = tanh[ 0.29672 + (scaled_ambient_temperature*-0.19369)+ (scaled_ambient_pressure*-0.120732)+ (scaled_ambient_humidity*-0.0440974)+ (scaled_air_filter_difference_pressure*0.16465)+ (scaled_gas_turbine_exhaust_pressure*0.141146)+ (scaled_turbine_inlet_temperature*-0.18549)+ (scaled_turbina_after_temperature*-0.526891)+ (scaled_compressor_discharge_pressure*0.0608875)+ (scaled_turbine_energy_yield*0.64176) ];\nperceptron_layer_output_5 = tanh[ 0.25708 + (scaled_ambient_temperature*0.543999)+ (scaled_ambient_pressure*-0.0609457)+ (scaled_ambient_humidity*0.217804)+ (scaled_air_filter_difference_pressure*0.244315)+ (scaled_gas_turbine_exhaust_pressure*0.189328)+ (scaled_turbine_inlet_temperature*0.261848)+ (scaled_turbina_after_temperature*0.716236)+ (scaled_compressor_discharge_pressure*0.588872)+ (scaled_turbine_energy_yield*-0.0108812) ];\nperceptron_layer_output_6 = tanh[ -0.198994 + (scaled_ambient_temperature*-0.450781)+ (scaled_ambient_pressure*0.197124)+ (scaled_ambient_humidity*-0.218839)+ (scaled_air_filter_difference_pressure*-0.902414)+ (scaled_gas_turbine_exhaust_pressure*0.209714)+ (scaled_turbine_inlet_temperature*-0.350971)+ (scaled_turbina_after_temperature*-0.134309)+ (scaled_compressor_discharge_pressure*0.676308)+ (scaled_turbine_energy_yield*0.693316) ];\nperceptron_layer_output_7 = tanh[ 0.36205 + (scaled_ambient_temperature*0.107133)+ (scaled_ambient_pressure*-0.205089)+ (scaled_ambient_humidity*-0.136273)+ (scaled_air_filter_difference_pressure*1.48464)+ (scaled_gas_turbine_exhaust_pressure*-0.873004)+ (scaled_turbine_inlet_temperature*-0.43132)+ (scaled_turbina_after_temperature*0.870051)+ (scaled_compressor_discharge_pressure*-0.40623)+ (scaled_turbine_energy_yield*-0.470652) ];\nperceptron_layer_output_8 = tanh[ -0.156348 + (scaled_ambient_temperature*0.16442)+ (scaled_ambient_pressure*-0.276366)+ (scaled_ambient_humidity*-0.327171)+ (scaled_air_filter_difference_pressure*-0.107857)+ (scaled_gas_turbine_exhaust_pressure*0.280374)+ (scaled_turbine_inlet_temperature*0.410885)+ (scaled_turbina_after_temperature*0.184566)+ (scaled_compressor_discharge_pressure*0.765856)+ (scaled_turbine_energy_yield*0.132936) ];\n\nperceptron_layer_output_0 = [ 0.0370975 + (perceptron_layer_output_0*0.94087)+ (perceptron_layer_output_1*1.20286)+ (perceptron_layer_output_2*-0.577754)+ (perceptron_layer_output_3*-0.809952)+ (perceptron_layer_output_4*-0.809902)+ (perceptron_layer_output_5*-0.85725)+ (perceptron_layer_output_6*-0.944901)+ (perceptron_layer_output_7*-0.611973)+ (perceptron_layer_output_8*0.668592) ];\n\nunscaling_layer_output_0 = perceptron_layer_output_0*(119.9100037-25.90500069)\/(1+1)+25.90500069+1*(119.9100037-25.90500069)\/(1+1);\n        <\/pre><\/section><section><h2>References<\/h2><ul><li>Heysem Kaya, Pinar Tufekci and Erdin&amp;ccedil Uzun. &#8216;Predicting CO and NOx emissions from gas turbines: novel data and a benchmark PEMS&#8217;, Turkish Journal of Electrical Engineering &amp; Computer Sciences, vol. 27, 2019, pp. 4783-4796<\/li><\/ul><\/section><section><h2>Related posts<\/h2><\/section>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"author":13,"featured_media":1690,"template":"","categories":[29],"tags":[44,46,43],"class_list":["post-3515","learning","type-learning","status-publish","has-post-thumbnail","hentry","category-examples","tag-energy","tag-environment","tag-industry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Reduce emissions from a power plant with machine learning<\/title>\n<meta name=\"description\" content=\"Build a machine learning model to reduce the greenhouse gas emissions of a combined cycle power plant using environmental and process data.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.neuraldesigner.com\/learning\/examples\/power-plant-gas-emissions-nox\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gas emission reduction machine learning example\" \/>\n<meta property=\"og:description\" content=\"Reducing the gas emissions of a combined cycle power plant using machine learning.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.neuraldesigner.com\/learning\/examples\/power-plant-gas-emissions-nox\/\" \/>\n<meta property=\"og:site_name\" content=\"Neural Designer\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-13T09:30:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/power-plant-gas-emissions-image.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Gas emission reduction machine learning example\" \/>\n<meta name=\"twitter:description\" content=\"Reducing the gas emissions of a combined cycle power plant using machine learning.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/power-plant-gas-emissions-image.webp\" \/>\n<meta name=\"twitter:site\" content=\"@NeuralDesigner\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/power-plant-gas-emissions-nox\/\",\"url\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/power-plant-gas-emissions-nox\/\",\"name\":\"Reduce emissions from a power plant with machine learning\",\"isPartOf\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/power-plant-gas-emissions-nox\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/power-plant-gas-emissions-nox\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/power-plant-gas-emissions-image.webp\",\"datePublished\":\"2026-01-05T10:12:58+00:00\",\"dateModified\":\"2026-03-13T09:30:00+00:00\",\"description\":\"Build a machine learning model to reduce the greenhouse gas emissions of a combined cycle power plant using environmental and process data.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/power-plant-gas-emissions-nox\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.neuraldesigner.com\/learning\/examples\/power-plant-gas-emissions-nox\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/power-plant-gas-emissions-nox\/#primaryimage\",\"url\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/power-plant-gas-emissions-image.webp\",\"contentUrl\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/power-plant-gas-emissions-image.webp\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.neuraldesigner.com\/learning\/examples\/power-plant-gas-emissions-nox\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.neuraldesigner.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Learning\",\"item\":\"https:\/\/www.neuraldesigner.com\/learning\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Reduce emissions from a power plant with machine learning\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.neuraldesigner.com\/#website\",\"url\":\"https:\/\/www.neuraldesigner.com\/\",\"name\":\"Neural Designer\",\"description\":\"Explanable AI Platform\",\"publisher\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.neuraldesigner.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.neuraldesigner.com\/#organization\",\"name\":\"Neural Designer\",\"url\":\"https:\/\/www.neuraldesigner.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png\",\"contentUrl\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png\",\"width\":1024,\"height\":223,\"caption\":\"Neural Designer\"},\"image\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/NeuralDesigner\",\"https:\/\/es.linkedin.com\/showcase\/neuraldesigner\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Reduce emissions from a power plant with machine learning","description":"Build a machine learning model to reduce the greenhouse gas emissions of a combined cycle power plant using environmental and process data.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.neuraldesigner.com\/learning\/examples\/power-plant-gas-emissions-nox\/","og_locale":"en_US","og_type":"article","og_title":"Gas emission reduction machine learning example","og_description":"Reducing the gas emissions of a combined cycle power plant using machine learning.","og_url":"https:\/\/www.neuraldesigner.com\/learning\/examples\/power-plant-gas-emissions-nox\/","og_site_name":"Neural Designer","article_modified_time":"2026-03-13T09:30:00+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/power-plant-gas-emissions-image.webp","type":"image\/webp"}],"twitter_card":"summary_large_image","twitter_title":"Gas emission reduction machine learning example","twitter_description":"Reducing the gas emissions of a combined cycle power plant using machine learning.","twitter_image":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/power-plant-gas-emissions-image.webp","twitter_site":"@NeuralDesigner","twitter_misc":{"Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/power-plant-gas-emissions-nox\/","url":"https:\/\/www.neuraldesigner.com\/learning\/examples\/power-plant-gas-emissions-nox\/","name":"Reduce emissions from a power plant with machine learning","isPartOf":{"@id":"https:\/\/www.neuraldesigner.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/power-plant-gas-emissions-nox\/#primaryimage"},"image":{"@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/power-plant-gas-emissions-nox\/#primaryimage"},"thumbnailUrl":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/power-plant-gas-emissions-image.webp","datePublished":"2026-01-05T10:12:58+00:00","dateModified":"2026-03-13T09:30:00+00:00","description":"Build a machine learning model to reduce the greenhouse gas emissions of a combined cycle power plant using environmental and process data.","breadcrumb":{"@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/power-plant-gas-emissions-nox\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.neuraldesigner.com\/learning\/examples\/power-plant-gas-emissions-nox\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/power-plant-gas-emissions-nox\/#primaryimage","url":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/power-plant-gas-emissions-image.webp","contentUrl":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/06\/power-plant-gas-emissions-image.webp","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/www.neuraldesigner.com\/learning\/examples\/power-plant-gas-emissions-nox\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.neuraldesigner.com\/"},{"@type":"ListItem","position":2,"name":"Learning","item":"https:\/\/www.neuraldesigner.com\/learning\/"},{"@type":"ListItem","position":3,"name":"Reduce emissions from a power plant with machine learning"}]},{"@type":"WebSite","@id":"https:\/\/www.neuraldesigner.com\/#website","url":"https:\/\/www.neuraldesigner.com\/","name":"Neural Designer","description":"Explanable AI Platform","publisher":{"@id":"https:\/\/www.neuraldesigner.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.neuraldesigner.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.neuraldesigner.com\/#organization","name":"Neural Designer","url":"https:\/\/www.neuraldesigner.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png","contentUrl":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png","width":1024,"height":223,"caption":"Neural Designer"},"image":{"@id":"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/NeuralDesigner","https:\/\/es.linkedin.com\/showcase\/neuraldesigner\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/learning\/3515","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/learning"}],"about":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/types\/learning"}],"author":[{"embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/users\/13"}],"version-history":[{"count":10,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/learning\/3515\/revisions"}],"predecessor-version":[{"id":22014,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/learning\/3515\/revisions\/22014"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/media\/1690"}],"wp:attachment":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/media?parent=3515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/categories?post=3515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/tags?post=3515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}