This paper proposes an online learning algorithm for data streams namely self-evolving fuzzy system (SEFS). Unlike the fixed control parameters commonly used in evolving fuzzy systems, SEFS uses online training errors, which measure the quality of an identified model in presenting the dynamics of the data stream, to set a dynamic threshold automatically for rule generation. This self-tuning parameter, which controls the speed and coverage for fuzzy rule generation, helps SEFS properly deal with the under-fitting/over-fitting problems relying on two facts. (1) Large training errors present an under-fitted model, which is too coarse to represent the highly complicated and rapidly dynamic (e.g. highly nonlinear, non-stationary) behavior of the data segment. Then, finer rules need to be added. (2) Tiny training errors reflect an over-fitted model, which can ideally represent any slight dynamic behavior of the data stream. In this case, coarse rule base should be used. Besides, a L 2 distance based geometric similarity measure is proposed in the rule merging phase. With this similarity measure, SEFS computes the similarity between Gaussian membership functions accurately without making an approximation of the Gaussian membership function beforehand. In addition, a weighted recursive least square algorithm with a variable forgetting factor (VFF-WRLS), which minimizes the mean square of the noise-free posterior error signal, is applied to learn the consequent parameters. Several benchmark examples across both artificial and real-life data sets verify that SEFS has the ability to give better performance compared with many state-of-the-art algorithms.Index Terms-Evolving fuzzy system, recursive least square, online learning, data stream.