📄 temporalneuraldataset.java
字号:
break;
case RAW:
result = getDataRAW(desc, index);
break;
default:
throw new TemporalError("Unsupported data type.");
}
if (desc.getActivationFunction() != null) {
result = desc.getActivationFunction().activationFunction(result);
}
return result;
}
/**
* Generate the training sets.
*/
public void generate() {
sortPoints();
final int start = calculateStartIndex() + 1;
final int setSize = calculateActualSetSize();
final int range = start + setSize - this.predictWindowSize
- this.inputWindowSize;
for (int i = start; i < range; i++) {
final BasicNeuralData input = generateInputNeuralData(i);
final BasicNeuralData ideal = generateOutputNeuralData(i
+ this.inputWindowSize);
final BasicNeuralDataPair pair = new BasicNeuralDataPair(input,
ideal);
super.add(pair);
}
}
/**
* Generate input neural data for the specified index.
*
* @param index
* The index to generate neural data for.
* @return The input neural data generated.
*/
public BasicNeuralData generateInputNeuralData(final int index) {
if (index + this.inputWindowSize > this.points.size()) {
throw new TemporalError("Can't generate input temporal data "
+ "beyond the end of provided data.");
}
final BasicNeuralData result = new BasicNeuralData(
this.inputNeuronCount);
int resultIndex = 0;
for (int i = 0; i < this.inputWindowSize; i++) {
int descriptionIndex = 0;
for (final TemporalDataDescription desc : this.descriptions) {
if (desc.isInput()) {
result.setData(resultIndex++, formatData(desc, index + i));
}
descriptionIndex++;
}
}
return result;
}
/**
* Generate neural ideal data for the specified index.
*
* @param index
* The index to generate for.
* @return The neural data generated.
*/
public BasicNeuralData generateOutputNeuralData(final int index) {
if (index + this.predictWindowSize > this.points.size()) {
throw new TemporalError("Can't generate prediction temporal data "
+ "beyond the end of provided data.");
}
final BasicNeuralData result = new BasicNeuralData(
this.outputNeuronCount);
int resultIndex = 0;
for (int i = 0; i < this.predictWindowSize; i++) {
int descriptionIndex = 0;
for (final TemporalDataDescription desc : this.descriptions) {
if (desc.isPredict()) {
result.setData(resultIndex++, formatData(desc, index + i));
}
descriptionIndex++;
}
}
return result;
}
/**
* Get data between two points in delta form.
*
* @param desc
* The data description.
* @param index
* The index to get data from.
* @return The requested data.
*/
private double getDataDeltaChange(final TemporalDataDescription desc,
final int index) {
if (index == 0) {
return 0.0;
}
final TemporalPoint point = this.points.get(index);
final TemporalPoint previousPoint = this.points.get(index - 1);
return point.getData(desc.getIndex())
- previousPoint.getData(desc.getIndex());
}
/**
* Get data between two points in percent form.
*
* @param desc
* The data description.
* @param index
* The index to get data from.
* @return The requested data.
*/
private double getDataPercentChange(final TemporalDataDescription desc,
final int index) {
if (index == 0) {
return 0.0;
}
final TemporalPoint point = this.points.get(index);
final TemporalPoint previousPoint = this.points.get(index - 1);
final double currentValue = point.getData(desc.getIndex());
final double previousValue = previousPoint.getData(desc.getIndex());
return (currentValue - previousValue) / previousValue;
}
/**
* Get data between two points in raw form.
*
* @param desc
* The data description.
* @param index
* The index to get data from.
* @return The requested data.
*/
private double getDataRAW(final TemporalDataDescription desc,
final int index) {
final TemporalPoint point = this.points.get(index);
return point.getData(desc.getIndex());
}
/**
* @return A list of the data descriptions.
*/
public List<TemporalDataDescription> getDescriptions() {
return this.descriptions;
}
/**
* @return the desiredSetSize
*/
public int getDesiredSetSize() {
return this.desiredSetSize;
}
/**
* @return the highSequence
*/
public int getHighSequence() {
return this.highSequence;
}
/**
* @return the inputNeuronCount
*/
public int getInputNeuronCount() {
return this.inputNeuronCount;
}
/**
* @return the inputWindowSize
*/
public int getInputWindowSize() {
return this.inputWindowSize;
}
/**
* @return the lowSequence
*/
public int getLowSequence() {
return this.lowSequence;
}
/**
* @return the outputNeuronCount
*/
public int getOutputNeuronCount() {
return this.outputNeuronCount;
}
/**
* @return The temporal points.
*/
public List<TemporalPoint> getPoints() {
return this.points;
}
/**
* @return the predictWindowSize
*/
public int getPredictWindowSize() {
return this.predictWindowSize;
}
/**
* Create a sequence number from a time. The first date will be zero, and
* subsequent dates will be increased according to the grandularity
* specified.
*
* @param when
* The date to generate the sequence number for.
* @return A sequence number.
*/
public int getSequenceFromDate(final Date when) {
int sequence;
if (this.startingPoint != null) {
final TimeSpan span = new TimeSpan(this.startingPoint, when);
sequence = (int) span.getSpan(this.sequenceGrandularity);
} else {
this.startingPoint = when;
sequence = 0;
}
return sequence;
}
/**
* @return the sequenceGrandularity
*/
public TimeUnit getSequenceGrandularity() {
return this.sequenceGrandularity;
}
/**
* @return the startingPoint
*/
public Date getStartingPoint() {
return this.startingPoint;
}
/**
* Is the specified point within the range. If a point is in the selection
* range, then the point will be used to generate the training sets.
*
* @param point
* The point to consider.
* @return True if the point is within the range.
*/
public boolean isPointInRange(final TemporalPoint point) {
return point.getSequence() >= getLowSequence()
&& point.getSequence() <= getHighSequence();
}
/**
* @param desiredSetSize
* the desiredSetSize to set
*/
public void setDesiredSetSize(final int desiredSetSize) {
this.desiredSetSize = desiredSetSize;
}
/**
* @param highSequence
* the highSequence to set
*/
public void setHighSequence(final int highSequence) {
this.highSequence = highSequence;
}
/**
* @param inputWindowSize
* the inputWindowSize to set
*/
public void setInputWindowSize(final int inputWindowSize) {
this.inputWindowSize = inputWindowSize;
}
/**
* @param lowSequence
* the lowSequence to set
*/
public void setLowSequence(final int lowSequence) {
this.lowSequence = lowSequence;
}
/**
* @param predictWindowSize
* the predictWindowSize to set
*/
public void setPredictWindowSize(final int predictWindowSize) {
this.predictWindowSize = predictWindowSize;
}
/**
* @param sequenceGrandularity
* the sequenceGrandularity to set
*/
public void setSequenceGrandularity(final TimeUnit sequenceGrandularity) {
this.sequenceGrandularity = sequenceGrandularity;
}
/**
* @param startingPoint
* the startingPoint to set
*/
public void setStartingPoint(final Date startingPoint) {
this.startingPoint = startingPoint;
}
/**
* Sort the points.
*/
public void sortPoints() {
Collections.sort(this.points);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -