Comments (8)
I think we should be more conservative here. Because when we need to extrapolate value for easy, there is zero review for easy. If the interval is too large, the user would not press easy any more.
from fsrs-optimizer.
Hmmm. We could take this a step further.
d = (c^w1)*(b^w2), where w1 and w2 are optimized on large bodies of data. In other words, we could find the best parameters for extrapolation by trying different values on different collections.
from fsrs-optimizer.
Good idea. Let's discuss all the possible situations for the first review data.
Category One: Data includes all four ratings - 'again,' 'hard,' 'good,' and 'easy.'
Category Two: Data has only three types of ratings.
Category Three: Data has only two types of ratings.
Category Four: Data has only one type of rating.
Category One is not part of this issue's discussion. For Category Four, the current method sets the same starting stability value for all four ratings.
For Category Two, your suggested method can solve it perfectly. Lastly, the issue might be with Category Three. There are several cases that your method might not work.
Case One: again
and hard
both are missing.
Case Two: hard
and good
both are missing.
Case Three: good
and easy
both are missing.
For Case One, the alternative method is to set hard
to good
^2/easy
. Then, apply again
= hard
^2/good
For Case Three, we can set good
to hard
^2 / again
, Then apply easy
= good
^2/hard
.
But for Case Two, I haven't figured out how to solve it.
from fsrs-optimizer.
For Case One, the alternative method is to set
hard
togood
^2/easy
. Then, applyagain
=hard
^2/good
For Case Three, we can set
good
tohard
^2 /again
, Then applyeasy
=good
^2/hard
.
I thought about this as well, seems like a good idea. For Case Two I don't know what to do either. I'll think about it.
As for Category Four, that one is very tricky. Here's my idea: take the default values and scale them so that one of them matches the only available value of S0, preserving their ratios. Example: only "Good" is available, and the value for it is 1.5. The default value for Good is 1. That means that our measured value is 1.5 times greater than default, so we multiply all default values by 1.5.
from fsrs-optimizer.
Oh. I figure it out.
Let a, b, c and d indicate initial stability for again, hard, good and easy. Here are some equations:
- a = b^2/c
- b = (ab)^(1/2)
- c = (bd)^(1/2)
- d = c^2/b
Then we can represent b and c with a and d:
- b = a^(2/3)*d^(1/3)
- c = a^(1/3)*d^(2/3)
from fsrs-optimizer.
I find a bad case:
0.16 for hard
2.4 for good
With Easy = Good^2/Hard, the initial stability for easy should be 36. Do you think it is too large?
from fsrs-optimizer.
So I did the math in Excel since I wrote down values of S0 anyway to find the best values, and I removed those datapoints where I replaced S0(Easy) with 5.8 or something else.
For minimization I used symmetric MAPE.
So here are the values: w1=-0.869, w2=1.937
S0(Easy)=(S0(Hard)^w1) * (S0(Good)^w2)
SMAPE.xlsx
Oh, btw, if Hard and Good are equal, this formula still makes sure that the value for Easy is slightly greater.
from fsrs-optimizer.
We should control w1 + w2 = 1.
from fsrs-optimizer.
Related Issues (20)
- Use the median instead of the mean for recall costs and learn cost HOT 8
- A better outlier filter for "Compute minimum recommended retention" HOT 2
- [Feature request] Further improving the estimation of reviews times for calculating minimum recommended retention HOT 13
- Q: Effect of review_duration column on weights HOT 1
- try ruff in ci? HOT 2
- `optimizer.create_time_series` raises Exception HOT 2
- In the stability charts, change RMSE to MAPE
- Enforce S0(Again) < S0(Hard) < S0(Good) < S0(Easy) HOT 2
- FSRS-5 优化器,优化参数时发生报错:“error Columns not found: 1, 2, 3, 4” HOT 5
- index 1 is out of bounds for axis 0 with size 1 [BUG] HOT 1
- Training data is inadequate. HOT 5
- [Question] Explain how the optimizer calculates retention that minimizes review times HOT 12
- [Feature Request] make the simulator more precise by using different values of recall_cost for Hard, Good and Easy
- [Bug] Can't use absolute path as arg HOT 1
- [BUG] 'Optimizer' object has no attribute 'w' HOT 1
- [Feature request] Improve post-lapse stability analysis HOT 13
- See if this code could be used to speed up finding optimal retention HOT 16
- [Feature Request] Investigate how robust are parameters and RMSE HOT 18
- Optimized w[3] too low HOT 12
- [Feature Request] Add another condition to the outlier filter HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from fsrs-optimizer.